home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / fullscreen.s < prev    next >
Text File  |  1997-01-31  |  156KB  |  10,917 lines

  1.     
  2.  
  3. *************************************************
  4. * Stuff to do to get a C2P version:
  5. * Change copperlist
  6. * Change wall drawing
  7. * change floor drawing
  8. * change object drawing
  9. * change polygon drawing (ugh)
  10. * Write a palette generator program in AMOS
  11. * to provide a good 256 colour palette and
  12. * convert all graphics files specified
  13. * (possibly included in the game linker
  14. * program).
  15. * Possibly change the wall/floor/object
  16. * palettes to look nicer with more shades.
  17. * RE-implement stippling (if not present)
  18. * as it will look gorgeous now.
  19. *************************************************
  20.  
  21. MIDDLEX set 144
  22. RIGHTX set 287
  23. BOTTOMY set 240
  24.  
  25. ;MIDDLEX set 96
  26. ;RIGHTX set 191
  27. ;BOTTOMY set 160
  28.  
  29. _break    macro
  30. ;    bkpt    \1
  31.     endm
  32.  
  33.  
  34. FILTER    macro
  35. ;    move.l    d0,-(sp)
  36. ;    move.l    #65000,d0
  37. ;.loop\@
  38. ;    bchg    #1,$bfe001
  39. ;    dbra    d0,.loop\@
  40. ;    move.l    (sp)+,d0
  41.     endm
  42.  
  43. BLACK    macro
  44.     move.w    #0,$dff180
  45.     endm
  46.  
  47. RED    macro
  48.     move.w    #$f00,$dff180
  49.     endm
  50.  
  51. FLASHER macro
  52. ;    movem.l    d1,-(sp)
  53. ;    move.w    #-1,d1
  54. ;
  55. ;loop3\@
  56. ;;    move.w    #\1,$dff180
  57. ;    nop
  58. ;    nop
  59. ;    move.w    #\2,$dff180
  60. ;    nop
  61. ;    nop
  62. ;    dbra    d1,loop3\@
  63.  
  64. ;    movem.l    (sp)+,d1
  65.  
  66.     endm
  67.  
  68. GREEN    macro
  69.     move.w    #$0f0,$dff180
  70.     endm
  71.  
  72. BLUE    macro
  73.     move.w    #$f,$dff180
  74.     endm
  75.  
  76. DataCacheOff macro
  77.     movem.l    a0-a6/d0-d7,-(sp)
  78.     move.l    4.w,a6
  79.     moveq    #0,d0
  80.     move.l    #%0000000100000000,d1
  81.     jsr    _LVOCacheControl(a6)
  82.     movem.l    (sp)+,a0-a6/d0-d7
  83.     endm
  84.  
  85. DataCacheOn macro
  86.     movem.l    a0-a6/d0-d7,-(sp)
  87.     move.l    4.w,a6
  88.     moveq    #-1,d0
  89.     move.l    #%0000000100000000,d1
  90.     jsr    _LVOCacheControl(a6)
  91.     movem.l    (sp)+,a0-a6/d0-d7
  92.     endm
  93.  
  94.     opt    P=68020
  95.  
  96.     include utils:sysinc/hardware/intbits.i
  97.  
  98. CD32VER equ 0
  99.  
  100. maxscrdiv EQU 8
  101. max3ddiv EQU 5
  102. playerheight EQU 12*1024
  103. playercrouched EQU 8*1024
  104. scrheight EQU 80
  105.  
  106. ; k/j/m
  107.  
  108. ; 4/8
  109. ; s/x
  110. ; b/n
  111.  
  112. midoffset EQU 104*4*40
  113.  
  114.  
  115.  SECTION Scrn,CODE
  116. OpenLib       equ -552
  117. CloseLib      equ -414
  118.  
  119. INTREQ        equ    $09C
  120. INTENA        equ    $09A
  121. INTENAR    equ    $01C
  122. DMACON        equ    $096
  123.  
  124. SERPER        equ    $032
  125. SERDATR    equ    $018
  126. SERDAT        equ    $030
  127. vhposr        equ $006    
  128. vhposrl    equ $007 
  129.  
  130. bltcon0    equ $40 
  131. bltcon1    equ $42
  132. bltcpt        equ $48
  133. bltbpt        equ $4c
  134. bltapt        equ $50
  135. spr0ctl    equ $142
  136. spr1ctl    equ $14a
  137. spr2ctl    equ $152
  138. spr3ctl    equ $15a
  139. spr4ctl    equ $162
  140. spr5ctl    equ $16a
  141. spr6ctl    equ $172
  142. spr7ctl    equ $17a
  143. spr0pos    equ $140
  144. spr1pos    equ $148
  145. spr2pos    equ $150
  146. spr3pos    equ $158
  147. spr4pos    equ $160
  148. spr5pos    equ $168
  149. spr6pos    equ $170
  150. spr7pos    equ $178
  151. bltdpt         equ $54
  152. bltafwm    equ $44
  153. bltalwm    equ $46
  154. bltsize         equ $58
  155. bltcmod         equ $60
  156. bltbmod         equ $62
  157. bltamod         equ $64
  158. bltdmod         equ $66
  159. diwstart        equ $8e         ; Screen hardware registers.
  160. diwstop         equ $90
  161. ddfstart        equ $92
  162. ddfstop         equ $94
  163. bplcon0         equ $100
  164. bplcon1         equ $102
  165. col0            equ $180
  166. col1            equ $182
  167. col2        equ $184
  168. col3        equ $186
  169. col4        equ $188
  170. col5        equ $18a
  171. col6        equ $18c
  172. col7        equ $18e
  173. col8            equ $190
  174. col9            equ $192
  175. col10           equ $194
  176. col11           equ $196
  177. col12           equ $198
  178. col13           equ $19a
  179. dmacon        equ $96
  180. dmaconr        equ $002
  181. intenar        equ $01c
  182. intena        equ $09a
  183. intreq        equ $09c
  184. intreqr        equ $01e
  185. intreqrl    equ $01f
  186. bpl1pth         equ $e0
  187. bpl1ptl         equ $e2
  188. bpl2pth        equ $e4
  189. bpl2ptl        equ $e6
  190. bpl3pth        equ $e8
  191. bpl3ptl        equ $ea
  192. bpl4pth        equ $ec
  193. bpl4ptl        equ $ee
  194. bpl5pth        equ $f0
  195. bpl5ptl        equ $f2
  196. bpl6pth        equ $f4
  197. bpl6ptl        equ $f6
  198. bpl7pth        equ $f8
  199. bpl7ptl        equ $fa
  200. bpl8pth        equ $fc
  201. bpl8ptl        equ $fe
  202. spr0pth        equ $120
  203. spr0ptl        equ $122
  204. spr1pth        equ $124
  205. spr1ptl        equ $126
  206. spr2pth        equ $128
  207. spr2ptl        equ $12a
  208. spr3pth        equ $12c
  209. spr3ptl        equ $12e
  210. spr4pth        equ $130
  211. spr4ptl        equ $132
  212. spr5pth        equ $134
  213. spr5ptl        equ $136
  214. spr6pth        equ $138
  215. spr6ptl        equ $13a
  216. spr7pth        equ $13c
  217. spr7ptl        equ $13e
  218. adkcon        equ   $09E
  219.  
  220.  
  221. ; move.l #length,d0
  222. ; moveq.l #2,d1    ; chipmem
  223. ; move.l 4.w,a6
  224. ; jsr allocmem(a6) = -198
  225.  
  226. ; tst.l d0
  227. ; beq.s ohbugger
  228. ; move.l d0,memaddr
  229.  
  230.  
  231. ; move.l 4.w,a6
  232. ; move.l memaddr,a1
  233. ; move.l #size,d0
  234. ; jsr freemem(a6) =-210
  235.  
  236.  
  237. ** This waits for the blitter to finish before allowing program
  238. ** execution to continue.
  239.  
  240.  
  241.  include "ab3:source_4000/protsetupdecode"
  242.  
  243. SAVEREGS MACRO
  244.  movem.l d0-d7/a0-a6,-(a7)
  245.  ENDM
  246.  
  247. GETREGS MACRO
  248.  movem.l (a7)+,d0-d7/a0-a6
  249.  ENDM
  250.  
  251.  
  252. WB MACRO
  253. \@bf:
  254.  btst #6,dmaconr(a6)
  255.  bne.s \@bf
  256.  ENDM
  257.  
  258. WBa MACRO
  259. \@bf:
  260.  move.w #\2,$dff180
  261.  
  262.  btst #6,$bfe001
  263.  bne.s \@bf
  264. \@bz:
  265.  
  266.  move.w #$f0f,$dff180
  267.  
  268.  btst #6,$bfe001
  269.  beq.s \@bz
  270.  
  271.  ENDM
  272.  
  273. *Another version for when a6 <> dff000
  274.  
  275. WBSLOW MACRO
  276. \@bf:
  277.  btst #6,$dff000+dmaconr
  278.  bne.s \@bf
  279.  ENDM
  280.  
  281. WT MACRO
  282. \@bf:
  283.  btst #6,(a3)
  284.  bne.s \@bd
  285.  rts
  286. \@bd: 
  287.  btst #4,(a0)
  288.  beq.s \@bf
  289.  ENDM
  290.  
  291. WTNOT MACRO
  292. \@bf:
  293.  btst #6,(a3)
  294.  bne.s \@bd
  295.  rts
  296. \@bd: 
  297.  btst #4,(a0)
  298.  bne.s \@bf
  299.  ENDM
  300.  
  301. **
  302.  
  303.  include "ab3:source_4000/ProtectionProtection"
  304.  include "macros.i"
  305.  include "ab3:source_4000/defs.i"
  306.  
  307.  move.w (a0)+,mors
  308.  
  309. ;    FLASHER $0f0,$fff
  310.  
  311. ; PROTFCALC
  312. ; PROTGCALC
  313. ; PROTHCALC
  314. ; PROTICALC
  315. ; PROTKCALC
  316. ; PROTLCALC
  317. ; PROTMCALC
  318.  
  319.  
  320.  
  321.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  322.  move.w intenar(a6),_storeint
  323.  and.w #$c000,_storeint
  324.  
  325.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  326.  
  327.  
  328.  st GOURSEL
  329.  
  330.  move.l 4.w,a6
  331.  lea VBLANKInt(pc),a1
  332.  moveq #INTB_COPER,d0
  333.  jsr _LVOAddIntServer(a6)
  334.  
  335.     IFEQ CD32VER
  336.  move.l 4.w,a6
  337.  lea KEYInt(pc),a1
  338.  moveq #INTB_PORTS,d0
  339.  jsr _LVOAddIntServer(a6)
  340.     ENDC
  341.     
  342.  move.l 4.w,a6
  343.  jsr _LVOSuperState(a6)
  344.  move.l d0,SSTACK
  345.  
  346.  DataCacheOff
  347. ; DATA_CACHE_OFF d2
  348.  
  349.  move.l 4.w,a6
  350.  move.l SSTACK,d0
  351.  jsr _LVOUserState(a6)
  352.  
  353.  
  354.  IFNE CD32VER
  355.  clr.b PLR1KEYS
  356.  clr.b PLR1PATH
  357.  clr.b PLR1MOUSE
  358.  st PLR1JOY
  359.  clr.b PLR2KEYS
  360.  clr.b PLR2PATH
  361.  clr.b PLR2MOUSE
  362.  st PLR2JOY
  363.  ELSE
  364.  st PLR1KEYS
  365.  clr.b PLR1PATH
  366.  clr.b PLR1MOUSE
  367.  clr.b PLR1JOY
  368.  st PLR2KEYS
  369.  clr.b PLR2PATH
  370.  clr.b PLR2MOUSE
  371.  clr.b PLR2JOY
  372.  ENDC
  373.  
  374.  PRSDO
  375.  
  376.  move.l #2,d1    
  377.  move.l #10240*2,d0
  378.  move.l 4.w,a6
  379.  jsr -198(a6)
  380.  move.l d0,TEXTSCRN
  381.  move.w d0,TSPTl
  382.  swap d0
  383.  move.w d0,TSPTh
  384.  
  385.  move.l #nullspr,d0
  386.  move.w d0,txs0l
  387.  move.w d0,txs1l
  388.  move.w d0,txs2l
  389.  move.w d0,txs3l
  390.  move.w d0,txs4l
  391.  move.w d0,txs5l
  392.  move.w d0,txs6l
  393.  move.w d0,txs7l
  394.  swap d0
  395.  move.w d0,txs0h
  396.  move.w d0,txs1h
  397.  move.w d0,txs2h
  398.  move.w d0,txs3h
  399.  move.w d0,txs4h
  400.  move.w d0,txs5h
  401.  move.w d0,txs6h
  402.  move.w d0,txs7h 
  403.  
  404.  move.l #1,d1    
  405.  move.l #120000,d0
  406.  move.l 4.w,a6
  407.  jsr -198(a6)
  408.  move.l d0,LEVELDATA
  409.  
  410.  move.l #1,d1    
  411.  move.l #2*320*256,d0
  412.  move.l 4.w,a6
  413.  jsr -198(a6)
  414.  move.l d0,FASTBUFFER
  415.  
  416.  
  417.  jsr START
  418.  
  419.  rts
  420.  
  421. FASTBUFFER: dc.l 0
  422. _storeint
  423.     dc.w 0
  424.  
  425. * Load level into buffers.
  426.  clr.b doanything
  427.  clr.b dosounds
  428.  
  429. ; DRAW TEXT SCREEN
  430.  
  431. TWEENTEXT:
  432.  
  433.  move.l #LEVELTEXT,a0
  434.  move.w PLOPT,d0
  435.  muls #82*16,d0
  436.  add.l d0,a0
  437.  
  438.  move.w #14,d7
  439.  move.w #0,d0
  440. DOWNTEXT:
  441.  move.l TEXTSCRN,a1
  442.  jsr DRAWLINEOFTEXT
  443.  addq #1,d0
  444.  add.w #82,a0
  445.  dbra d7,DOWNTEXT
  446.  rts
  447.  
  448. FONTADDRS:
  449.  dc.l ENDFONT0,CHARWIDTHS0
  450.  dc.l ENDFONT1,CHARWIDTHS1
  451.  dc.l ENDFONT2,CHARWIDTHS2
  452.  
  453. ENDFONT0:
  454.  incbin "endfont0"
  455. CHARWIDTHS0:
  456.  incbin "charwidths0"
  457. ENDFONT1:
  458.  incbin "endfont1"
  459. CHARWIDTHS1:
  460.  incbin "charwidths1"
  461. ENDFONT2:
  462.  incbin "endfont2"
  463. CHARWIDTHS2:
  464.  incbin "charwidths2"
  465.  
  466.  even
  467.  
  468. DRAWLINEOFTEXT:
  469.  movem.l d0/a0/d7,-(a7)
  470.  
  471.  muls #80*16,d0
  472.  add.l d0,a1    ; screen pointer
  473.  
  474.  move.l #FONTADDRS,a3
  475.  moveq #0,d0
  476.  move.b (a0)+,d0
  477.  move.l (a3,d0.w*8),a2
  478.  move.l 4(a3,d0.w*8),a3
  479.  
  480.  moveq #0,d1    ; width counter:
  481.  move.w #79,d6
  482.  tst.b (a0)+
  483.  beq.s NOTCENTRED
  484.  moveq #-1,d5
  485.  move.l a0,a4
  486.  moveq #0,d2
  487.  moveq #0,d3
  488.  move.w #79,d0    ; number of chars
  489. .addup:
  490.  addq #1,d5
  491.  move.b (a4)+,d2
  492.  move.b -32(a3,d2.w),d4
  493.  add.w d4,d3
  494.  cmp.b #32,d2
  495.  beq.s .DONTPUTIN
  496.  move.w d5,d6
  497.  move.w d3,d1
  498. .DONTPUTIN:
  499.  dbra d0,.addup
  500.  asr.w #1,d1
  501.  neg.w d1
  502.  add.w #320,d1    ; horiz pos of start x
  503.  
  504. NOTCENTRED:
  505.  move.w d6,d7
  506. DOACHAR:
  507.  moveq #0,d2
  508.  move.b (a0)+,d2
  509.  sub.w #32,d2
  510.  moveq #0,d6
  511.  move.b (a3,d2.w),d6
  512.  asl.w #5,d2
  513.  lea (a2,d2.w),a4    ; char font
  514. val SET 0
  515.  REPT 16
  516.  move.w (a4)+,d0
  517.  bfins d0,val(a1){d1:d6}
  518. val SET val+80
  519.  ENDR
  520.  add.w d6,d1
  521.  dbra d7,DOACHAR
  522.  movem.l (a7)+,d0/a0/d7
  523.  rts 
  524.  
  525.  
  526. CLRTWEENSCRN:
  527.  move.l TEXTSCRN,a0
  528.  move.w #(10240/16)-1,d0
  529.  move.l #$0,d1
  530. .lll
  531.  move.l d1,(a0)+
  532.  move.l d1,(a0)+
  533.  move.l d1,(a0)+
  534.  move.l d1,(a0)+
  535.  move.l d1,(a0)+
  536.  move.l d1,(a0)+
  537.  move.l d1,(a0)+
  538.  move.l d1,(a0)+
  539.  dbra d0,.lll
  540.  rts
  541.  
  542. PLAYTHEGAME:
  543.  
  544.  move.w #0,TXTCOLL
  545.  
  546.  bsr CLRTWEENSCRN
  547.  
  548.  cmp.b #'n',mors
  549.  bne.s .notext
  550.  bsr TWEENTEXT
  551. .notext
  552.  
  553. ;charlie 
  554.  move.l #TEXTCOP,$dff080
  555.  
  556.  move.w #$10,d0
  557.  move.w #7,d1
  558.  
  559. .fdup
  560.  move.w d0,TXTCOLL
  561.  add.w #$121,d0
  562. .wtframe:
  563.  btst #5,$dff000+intreqrl
  564.  beq.s .wtframe
  565.  move.w #$0020,$dff000+intreq
  566.  dbra d1,.fdup
  567.  
  568.  jsr INITCOPPERSCRN
  569.  
  570. ; Get level memory.
  571.  
  572.  move.l #1,d1
  573.  move.l #50000,d0
  574.  move.l 4.w,a6
  575.  jsr -198(a6)
  576.  move.l d0,LEVELGRAPHICS
  577.  
  578.  move.l #1,d1
  579.  move.l #40000,d0
  580.  move.l 4.w,a6
  581.  jsr -198(a6)
  582.  move.l d0,LEVELCLIPS
  583.  
  584.  move.l #$dff000,a6
  585.  jsr SETPLAYERS
  586.  
  587. ; move.l #LEVELDATAD,LEVELDATA
  588. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  589. ; move.l #LEVELCLIPSD,LEVELCLIPS
  590.  
  591. ; bra noload
  592.  
  593. *********************************
  594.  
  595.  move.l doslib,a6
  596.  move.l #LLname,d1
  597.  move.l #1005,d2
  598.  jsr -30(a6)
  599.  move.l d0,LLhandle
  600.  
  601.  move.l doslib,a6
  602.  move.l d0,d1
  603.  move.l #LINKS,d2
  604.  move.l #10000,d3
  605.  jsr -42(a6)
  606.  
  607.  move.l doslib,a6
  608.  move.l LLhandle,d1
  609.  jsr -36(a6)
  610.  
  611.  ********************************
  612.  
  613.  
  614.  move.l doslib,a6
  615.  move.l #LDname,d1
  616.  move.l #1005,d2
  617.  jsr -30(a6)
  618.  move.l d0,LDhandle
  619.  
  620.  move.l doslib,a6
  621.  move.l d0,d1
  622.  move.l LEVELCLIPS,d2
  623.  move.l #40000,d3
  624.  jsr -42(a6)
  625.  
  626.  move.l doslib,a6
  627.  move.l LDhandle,d1
  628.  jsr -36(a6)
  629.  
  630. *************************************
  631.     move.l    LEVELCLIPS,d0
  632.     moveq    #0,d1
  633.     move.l LEVELDATA,a0
  634.     lea    WorkSpace,a1
  635.     lea    $0,a2
  636.     jsr    unLHA
  637. *************************************
  638.  
  639. ********
  640.  
  641.  move.l doslib,a6
  642.  move.l #LGname,d1
  643.  move.l #1005,d2
  644.  jsr -30(a6)
  645.  move.l d0,LGhandle
  646.  
  647.  move.l doslib,a6
  648.  move.l d0,d1
  649.  move.l LEVELCLIPS,d2
  650.  move.l #40000,d3
  651.  jsr -42(a6)
  652.  
  653.  move.l doslib,a6
  654.  move.l LGhandle,d1
  655.  jsr -36(a6)
  656.  
  657. *************************************
  658.     move.l    LEVELCLIPS,d0
  659.     moveq    #0,d1
  660.     move.l LEVELGRAPHICS,a0
  661.     lea    WorkSpace,a1
  662.     lea    $0,a2
  663.     jsr    unLHA
  664. *************************************
  665.  
  666.  
  667. ********
  668.  
  669.  move.l doslib,a6
  670.  move.l #LCname,d1
  671.  move.l #1005,d2
  672.  jsr -30(a6)
  673.  move.l d0,LChandle
  674.  
  675.  move.l doslib,a6
  676.  move.l d0,d1
  677.  move.l #WorkSpace+16384,d2
  678.  move.l #16000,d3
  679.  jsr -42(a6)
  680.  
  681.  move.l doslib,a6
  682.  move.l LChandle,d1
  683.  jsr -36(a6)
  684.  
  685. *************************************
  686.     move.l    #WorkSpace+16384,d0
  687.     moveq    #0,d1
  688.     move.l LEVELCLIPS,a0
  689.     lea    WorkSpace,a1
  690.     lea    $0,a2
  691.     jsr    unLHA
  692. *************************************
  693.  
  694.  
  695. *******
  696.  
  697. noload:
  698.  
  699. ********
  700.  
  701. ; move.l doslib,a6
  702. ; move.l #Prefsname,d1
  703. ; move.l #1005,d2
  704. ; jsr -30(a6)
  705. ; move.l d0,Prefshandle
  706.  
  707. ; move.l doslib,a6
  708. ; move.l d0,d1
  709. ; move.l #Prefsfile,d2
  710. ; move.l #50,d3
  711. ; jsr -42(a6)
  712.  
  713. ; move.l doslib,a6
  714. ; move.l Prefshandle,d1
  715. ; jsr -36(a6)
  716.  
  717. *******
  718.  
  719.  IFNE CD32VER
  720.  move.l doslib,a6
  721.  move.l #115,d1
  722.  jsr -198(a6)
  723.  ENDC
  724.  
  725.  
  726. ; move.l doslib,d0
  727. ; move.l d0,a1
  728. ; move.l 4.w,a6
  729. ; jsr CloseLib(a6)
  730.  
  731.  move.l #$dff000,a6
  732.  
  733. charlie:
  734. ; jmp  ENDGAMESCROLL
  735.  
  736.     move.w #$87c0,dmacon(a6)
  737.  
  738.     move.w    #%1000000000100000,dmacon(a6)
  739.  
  740. ; move.w intenar(a6),saveinters
  741.     
  742.     move.w #%00101111,intena(a6)
  743.  
  744.     move.w #255,adkcon(a6)
  745.  
  746.  
  747. *** Put myself in supervisor mode
  748.  
  749.  bra blag
  750. ; move.l $6c,d0
  751. ; move.l #blag,$6c
  752. ; move.w #$8010,intreq(a6)
  753.  
  754.  rts
  755.  
  756. saveit: ds.l 10
  757. doslibname: dc.b 'dos.library',0
  758.  even
  759. doslib: dc.l 0
  760.  
  761. mors: dc.w 0
  762.  
  763. LDname: dc.b 'ab3d2:levels/level_'
  764. LEVA:
  765.  dc.b 'a/twolev.bin',0
  766.  even
  767. LDhandle: dc.l 0
  768. LGname: dc.b 'ab3d2:levels/level_'
  769. LEVB:
  770.  dc.b 'a/twolev.graph.bin',0
  771.  even
  772. LGhandle: dc.l 0
  773. LCname: dc.b 'ab3d2:levels/level_'
  774. LEVC:
  775.  dc.b 'a/twolev.clips',0
  776.  even
  777. LChandle: dc.l 0
  778. LLname: dc.b 'ab3d2:levels/level_'
  779. LEVD:
  780.  dc.b 'a/twolev.map',0
  781.  even
  782. LLhandle: dc.l 0
  783.  
  784.     cnop    0,4
  785.  
  786. Prefsname: dc.b 'ram:prefs',0
  787.  even
  788. Prefshandle: dc.l 0
  789.  
  790. Prefsfile:
  791.  dc.b 'k4nx'
  792.  ds.b 50
  793.  
  794.  even
  795.  
  796.  cnop 0,4
  797.  
  798. VBLANKInt
  799.  dc.l 0,0
  800.  dc.b NT_INTERRUPT,9
  801.  dc.l Prefsname
  802.  dc.l 0
  803.  dc.l Chan0inter
  804.  
  805.  
  806. KEYInt
  807.  dc.l 0,0
  808.  dc.b NT_INTERRUPT,127
  809.  dc.l Prefsname
  810.  dc.l 0
  811.  dc.l key_interrupt
  812.  
  813.  
  814. blag:
  815. ; move.w #$10,intreq(a6)
  816. ; move.l d0,$6c
  817. ; move.w #$7fff,intena(a6)
  818.  
  819. ; move.w #$20,$dff1dc
  820.  
  821. ; move.l 4.w,a6
  822. ; lea VBLANKInt(pc),a1
  823. ; moveq #INTB_COPER,d0
  824. ; jsr _LVOAddIntServer(a6)
  825.  
  826. ****************************
  827. * Initialize level
  828. ****************************
  829. * Poke all clip offsets into
  830. * correct bit of level data.
  831. ****************************
  832.  move.l LEVELGRAPHICS,a0
  833.  move.l 12(a0),a1
  834.  add.l a0,a1
  835.  move.l a1,ZoneGraphAdds
  836.  move.l (a0),a1
  837.  add.l a0,a1
  838.  move.l a1,DoorData
  839.  move.l 4(a0),a1
  840.  add.l a0,a1
  841.  move.l a1,LiftData
  842.  move.l 8(a0),a1
  843.  add.l a0,a1
  844.  move.l a1,SwitchData
  845.  adda.w #16,a0
  846.  move.l a0,ZoneAdds
  847.  
  848.  move.l LEVELDATA,a1
  849.  
  850.  lea 54(a1),a2
  851.  move.l a2,CPtPos
  852.  move.w 12(a1),NumCPts
  853.  
  854.  move.l 16+6(a1),a2
  855.  add.l a1,a2
  856.  move.l a2,Points
  857.  move.w 8+6(a1),d0
  858.  lea 4(a2,d0.w*4),a2
  859.  move.l a2,PointBrights
  860.  
  861.  move.l 20+6(a1),a2
  862.  add.l a1,a2
  863.  move.l a2,FloorLines
  864.  move.l 24+6(a1),a2
  865.  add.l a1,a2
  866.  move.l a2,ObjectData
  867. *****************************************
  868. * Just for charles
  869.  
  870. ; move.w #$6060,6(a2)
  871. ; move.l #$d0000,8(a2)
  872. ; sub.w #40,4(a2)
  873. ; move.w #45*256+45,14(a2)
  874. ****************************************
  875.  move.l 28+6(a1),a2
  876.  add.l a1,a2
  877.  move.l a2,PlayerShotData
  878.  move.l 32+6(a1),a2
  879.  add.l a1,a2
  880.  move.l a2,NastyShotData
  881.  
  882.  add.l #64*20,a2
  883.  move.l a2,OtherNastyData
  884.  
  885.  move.l 36+6(a1),a2
  886.  add.l a1,a2
  887.  move.l a2,ObjectPoints  
  888.  move.l 40+6(a1),a2
  889.  add.l a1,a2
  890.  move.l a2,PLR1_Obj
  891.  move.l 44+6(a1),a2
  892.  add.l a1,a2
  893.  move.l a2,PLR2_Obj
  894.  move.w 14+6(a1),NumObjectPoints
  895.  
  896. ; bra noclips
  897.   
  898.  move.l LEVELCLIPS,a2
  899.  moveq #0,d0
  900.  move.w 10+6(a1),d7    ;numzones
  901. assignclips:
  902.  move.l (a0)+,a3
  903.  add.l a1,a3    ; pointer to a zone
  904.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  905. dowholezone:
  906.  tst.w (a3)
  907.  blt.s nomorethiszone
  908.  tst.w 2(a3)
  909.  blt.s thisonenull
  910.  
  911.  move.l d0,d1
  912.  asr.l #1,d1
  913.  move.w d1,2(a3)
  914.  
  915. findnextclip:
  916.  cmp.w #-2,(a2,d0.l)
  917.  beq.s foundnextclip
  918.  addq.l #2,d0
  919.  bra.s findnextclip
  920. foundnextclip
  921.  addq.l #2,d0
  922.  
  923. thisonenull:
  924.  addq #8,a3 
  925.  bra.s dowholezone
  926. nomorethiszone:
  927.  dbra d7,assignclips
  928.  
  929.  lea (a2,d0.l),a2
  930.  move.l a2,CONNECT_TABLE
  931.  
  932. noclips:
  933.  
  934. * Put in addresses of glowything
  935.  
  936.  
  937. ************************************
  938.  
  939. ; cmp.b #'k',Prefsfile
  940. ; bne.s nkb
  941.  
  942. ;nkb:
  943. ; cmp.b #'m',Prefsfile
  944. ; bne.s nmc
  945. ; clr.b PLR1KEYS
  946. ; clr.b PLR1PATH
  947. ; st PLR1MOUSE
  948. ; clr.b PLR1JOY
  949. ;nmc:
  950. ; cmp.b #'j',Prefsfile
  951. ; bne.s njc
  952. ; clr.b PLR1KEYS
  953. ; clr.b PLR1PATH
  954. ; clr.b PLR1MOUSE
  955. ; st PLR1JOY
  956. ;njc:
  957.  
  958.  clr.b PLR1_StoodInTop
  959.  move.l #playerheight,PLR1s_height
  960.  
  961.  move.l #empty,pos1LEFT
  962.  move.l #empty,pos2LEFT
  963.  move.l #empty,pos1RIGHT
  964.  move.l #empty,pos2RIGHT
  965.  move.l #emptyend,Samp0endLEFT
  966.  move.l #emptyend,Samp1endLEFT
  967.  move.l #emptyend,Samp0endRIGHT
  968.  move.l #emptyend,Samp1endRIGHT
  969.  
  970.  
  971.  move.l #nullline,d0
  972.  move.w d0,n1l
  973.  swap d0
  974.  move.w d0,n1h
  975.  
  976.  move.l Panel,d0
  977.  move.w d0,p1l
  978.  swap d0
  979.  move.w d0,p1h
  980.  swap d0
  981.  add.l #40,d0
  982.  move.w d0,p2l
  983.  swap d0
  984.  move.w d0,p2h
  985.  swap d0
  986.  add.l #40,d0
  987.  move.w d0,p3l
  988.  swap d0
  989.  move.w d0,p3h
  990.  swap d0
  991.  add.l #40,d0
  992.  move.w d0,p4l
  993.  swap d0
  994.  move.w d0,p4h
  995.  swap d0
  996.  add.l #40,d0
  997.  move.w d0,p5l
  998.  swap d0
  999.  move.w d0,p5h
  1000.  swap d0
  1001.  add.l #40,d0
  1002.  move.w d0,p6l
  1003.  swap d0
  1004.  move.w d0,p6h
  1005.  swap d0
  1006.  add.l #40,d0
  1007.  move.w d0,p7l
  1008.  swap d0
  1009.  move.w d0,p7h
  1010.  swap d0
  1011.  add.l #40,d0
  1012.  move.w d0,p8l
  1013.  swap d0
  1014.  move.w d0,p8h
  1015.  
  1016. *******************************
  1017. * TIMER SCREEN SETUP
  1018. ; move.l #TimerScr,d0
  1019. ; move.w d0,p1l
  1020. ; swap d0
  1021. ; move.w d0,p1h
  1022. ; move.w #$1201,Panelcon
  1023.  
  1024.  move.l #borders,d0
  1025.  move.w d0,s0l
  1026.  swap d0
  1027.  move.w d0,s0h
  1028.  move.l #borders+2592,d0
  1029.  move.w d0,s1l
  1030.  swap d0
  1031.  move.w d0,s1h
  1032.  move.l #borders+2592*2,d0
  1033.  move.w d0,s2l
  1034.  swap d0
  1035.  move.w d0,s2h
  1036.  move.l #borders+2592*3,d0
  1037.  move.w d0,s3l
  1038.  swap d0
  1039.  move.w d0,s3h
  1040.  
  1041.  move.l #nullspr,d0
  1042.  move.w d0,s0l
  1043.  move.w d0,s1l
  1044.  move.w d0,s2l
  1045.  move.w d0,s3l
  1046.  
  1047.  move.w d0,s4l
  1048.  move.w d0,s5l
  1049.  move.w d0,s6l
  1050.  move.w d0,s7l
  1051.  swap d0
  1052.  
  1053.  move.w d0,s0h
  1054.  move.w d0,s1h
  1055.  move.w d0,s2h
  1056.  move.w d0,s3h
  1057.  
  1058.  move.w d0,s4h
  1059.  move.w d0,s5h
  1060.  move.w d0,s6h
  1061.  move.w d0,s7h 
  1062.  
  1063.  
  1064.  move.w #52*256+64,borders
  1065.  move.w #212*256+0,borders+8
  1066.  move.w #52*256+64,borders+2592
  1067.  move.w #212*256+128,borders+8+2592
  1068.  move.w #52*256+192,borders+2592*2
  1069.  move.w #212*256+0,borders+8+2592*2
  1070.  move.w #52*256+192,borders+2592*3
  1071.  move.w #212*256+128,borders+8+2592*3
  1072.  
  1073.  move.l #FacePlace,d0
  1074.  move.w d0,f1l
  1075.  swap d0
  1076.  move.w d0,f1h
  1077.  move.l #FacePlace+32*24,d0
  1078.  move.w d0,f2l
  1079.  swap d0
  1080.  move.w d0,f2h
  1081.  move.l #FacePlace+32*24*2,d0
  1082.  move.w d0,f3l
  1083.  swap d0
  1084.  move.w d0,f3h
  1085.  move.l #FacePlace+32*24*3,d0
  1086.  move.w d0,f4l
  1087.  swap d0
  1088.  move.w d0,f4h
  1089.  move.l #FacePlace+32*24*4,d0
  1090.  move.w d0,f5l
  1091.  swap d0
  1092.  move.w d0,f5h
  1093.   
  1094.  
  1095.  move.l #bigfield,d0
  1096.  move.w d0,ocl
  1097.  swap d0
  1098.  move.w d0,och
  1099.  
  1100.  bset.b #1,$bfe001
  1101.  
  1102. ; jmp stuff
  1103. ;endstuff:
  1104.  
  1105.  move.w #$00ff,$dff09e
  1106.  
  1107. ; move.l #Blurbfield,$dff080
  1108.  
  1109.  move.w #0,d0
  1110.  
  1111.  move.l #scrn,d0
  1112.  move.w d0,pl1l
  1113.  swap d0
  1114.  move.w d0,pl1h
  1115.  
  1116.  move.l #scrn+10240,d0
  1117.  move.w d0,pl2l
  1118.  swap d0
  1119.  move.w d0,pl2h
  1120.  
  1121.  move.l #scrn+10240*2,d0
  1122.  move.w d0,pl3l
  1123.  swap d0
  1124.  move.w d0,pl3h
  1125.  
  1126.  move.l #scrn+10240*3,d0
  1127.  move.w d0,pl4l
  1128.  swap d0
  1129.  move.w d0,pl4h
  1130.  
  1131.  move.l #scrn+10240*4,d0
  1132.  move.w d0,pl5l
  1133.  swap d0
  1134.  move.w d0,pl5h
  1135.  
  1136.  move.l #scrn+10240*5,d0
  1137.  move.w d0,pl6l
  1138.  swap d0
  1139.  move.w d0,pl6h
  1140.  
  1141.  move.l #scrn+10240*6,d0
  1142.  move.w d0,pl7l
  1143.  swap d0
  1144.  move.w d0,pl7h
  1145.  
  1146.  move.l #scrn+10240*7,d0
  1147.  move.w d0,pl8l
  1148.  swap d0
  1149.  move.w d0,pl8h
  1150.  
  1151.  
  1152. ****************************
  1153.  jsr INITPLAYER
  1154. ; bsr initobjpos
  1155. ****************************
  1156.  
  1157.  
  1158.  move.l #$dff000,a6
  1159.  
  1160.  move.l #null,$dff0a0
  1161.  move.w #100,$dff0a4
  1162.  move.w #443,$dff0a6
  1163.  move.w #63,$dff0a8
  1164.  
  1165.  move.l #null2,$dff0b0
  1166.  move.w #100,$dff0b4
  1167.  move.w #443,$dff0b6
  1168.  move.w #63,$dff0b8
  1169.  
  1170.  move.l #null4,$dff0c0
  1171.  move.w #100,$dff0c4
  1172.  move.w #443,$dff0c6
  1173.  move.w #63,$dff0c8
  1174.  
  1175.  move.l #null3,$dff0d0
  1176.  move.w #100,$dff0d4
  1177.  move.w #443,$dff0d6
  1178.  move.w #63,$dff0d8
  1179.  
  1180.  move.l #tab,a1
  1181.  move.w #64,d7
  1182.  move.w #0,d6
  1183. outerlop
  1184.  move.l #pretab,a0
  1185.  move.w #255,d5
  1186. scaledownlop:
  1187.  move.b (a0)+,d0
  1188.  ext.w d0
  1189.  ext.l d0
  1190.  muls d6,d0
  1191.  asr.l #6,d0
  1192.  move.b d0,(a1)+
  1193.  dbra d5,scaledownlop
  1194.  addq #1,d6
  1195.  dbra d7,outerlop
  1196.  
  1197.  move.l #$dff000,a6
  1198.  
  1199.  move.w #$c018,intena(a6)
  1200.  
  1201.  move.w #$f,dmacon(a6)
  1202.  move.w #$820f,dmacon(a6)
  1203.  
  1204. ; bsr protinit
  1205.  
  1206.  
  1207. ; move.w #$20,$1dc(a6)
  1208.  
  1209.  move.w #$0,$dff034
  1210.  move.w #0,Conditions
  1211.  
  1212.  cmp.b #'n',mors
  1213.  beq.s .nokeys
  1214.  move.w #%111111111111,Conditions
  1215. .nokeys:
  1216.  
  1217.  move.l #KeyMap,a5
  1218.  clr.b $45(a5)
  1219.  
  1220.  move.l #ingame,mt_data
  1221.  clr.b UseAllChannels
  1222.  
  1223. ; cmp.b #'b',Prefsfile+3
  1224. ; bne.s .noback
  1225. ; jsr mt_init
  1226. ;.noback:
  1227. ;
  1228. ; clr.b CHANNELDATA
  1229. ; clr.b CHANNELDATA+8
  1230. ; clr.b CHANNELDATA+16
  1231. ; clr.b CHANNELDATA+24
  1232. ;
  1233. ; cmp.b #'b',Prefsfile+3
  1234. ; bne.s noreserve
  1235. ;
  1236. ; st CHANNELDATA
  1237. ; st CHANNELDATA+8
  1238. ; st CHANNELDATA+16
  1239. ; st CHANNELDATA+24
  1240. ;noreserve: 
  1241.  
  1242. ; st CHANNELDATA
  1243. ; st CHANNELDATA+8
  1244.  
  1245.  move.l SampleList+6*8,pos0LEFT
  1246.  move.l SampleList+6*8+4,Samp0endLEFT
  1247.  move.l #playerheight,PLR1s_targheight
  1248.  move.l #playerheight,PLR1s_height
  1249.  move.l #playerheight,PLR2s_targheight
  1250.  move.l #playerheight,PLR2s_height
  1251.  
  1252. ; cmp.b #'n',mors
  1253. ; beq.s nohandshake
  1254. ;
  1255. ; move.b #%11011000,$bfd200
  1256. ; move.b #%00010000,$bfd000
  1257. ;waitloop:
  1258. ; btst.b #4,$bfd000
  1259. ; bne.s waitloop
  1260. ; move.b #%11000000,$bfd200
  1261.  
  1262. ;wtmouse:
  1263. ; btst #6,$bfe001
  1264. ; bne.s wtmouse
  1265.  
  1266. ;nohandshake:
  1267.  
  1268. ; jmp end
  1269.  
  1270.  move.l COPSCRN1,drawpt
  1271.  move.l COPSCRN2,olddrawpt
  1272.  
  1273.  jsr CLEARKEYBOARD
  1274.  jsr MAKEBACKROUT
  1275.  
  1276.  clr.b MASTERQUITTING
  1277.  
  1278.  cmp.b #'n',mors
  1279.  seq SLAVEQUITTING
  1280.  
  1281.  move.w #127,PLR2_energy
  1282.  
  1283. ; move.l #ANOTHERSUP,$80
  1284. ; trap #0
  1285. ; rts
  1286. ;
  1287. ;ANOTHERSUP:
  1288.  
  1289.  move.l $4.w,a6
  1290.  jsr _LVOSuperState(a6)
  1291.  move.l d0,SSTACK
  1292.  
  1293.  CACHE_FREEZE_OFF d2
  1294.  
  1295. ; charlie
  1296. ; DATA_CACHE_ON d2
  1297.  
  1298.  DataCacheOn
  1299.  
  1300.  move.l $4.w,a6
  1301.  move.l SSTACK,d0
  1302.  jsr _LVOUserState(a6)
  1303.  
  1304.  move.l #0,hitcol
  1305.  
  1306.  cmp.b #'n',mors
  1307.  bne.s NOCLTXT
  1308.  
  1309.  move.b #0,lastpressed
  1310. .wtpress
  1311.  btst #6,$bfe001
  1312.  beq.s CLOSETXT
  1313.  btst #7,$bfe001
  1314.  beq.s CLOSETXT
  1315.  tst.b lastpressed
  1316.  beq.s .wtpress
  1317.  
  1318. CLOSETXT:
  1319.  
  1320.  move.w #$8f8,d0
  1321.  move.w #7,d1
  1322.  
  1323. .fdup
  1324.  move.w d0,TXTCOLL
  1325.  sub.w #$121,d0
  1326. .wtframe:
  1327.  btst #5,$dff000+intreqrl
  1328.  beq.s .wtframe
  1329.  move.w #$0020,$dff000+intreq
  1330.  dbra d1,.fdup
  1331.  
  1332.  move.w #0,TXTCOLL
  1333.  
  1334. NOCLTXT:
  1335.  
  1336.  
  1337.  
  1338.     move.l    4.w,a6
  1339.     jsr    _LVOForbid(a6)
  1340. ;    jsr    _LVODisable(a6)
  1341.  
  1342.  
  1343. ;    move.w    #%0111111111111111,intena+$dff000
  1344. ;    move.w    #%1000000011111111,intena+$dff000
  1345.  
  1346.  
  1347. ;charlie 
  1348.  move.l #PALETTEBIT,$dff084
  1349.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1350.  
  1351.  
  1352.  clr.b PLR1_Ducked
  1353.  clr.b PLR2_Ducked
  1354.  clr.b p1_ducked
  1355.  clr.b p2_ducked
  1356.  
  1357. ********************************************
  1358.  
  1359. ;    jmp docredits
  1360.  
  1361. ********************************************
  1362.  
  1363.  
  1364.  st doanything
  1365.  st dosounds
  1366.  
  1367.  jsr CLRNASTYMEM
  1368.  
  1369. lop:
  1370.  
  1371.  btst #6,$bfe001
  1372. ;charlie bne.b .nocop
  1373.  
  1374. ;charlie move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1375.  
  1376. .nocop
  1377.  
  1378.  move.l #KeyMap,a5
  1379.  
  1380.  cmp.b #'n',mors
  1381.  bne .nopause
  1382.  tst.b $19(a5)
  1383.  beq.s .nopause
  1384.  clr.b doanything
  1385.  
  1386. .waitrel:
  1387.  
  1388.  tst.b PLR1JOY
  1389.  beq.s .NOJOY
  1390.  jsr _ReadJoy1
  1391. .NOJOY
  1392.  
  1393.  tst.b $19(a5)
  1394.  bne.s .waitrel
  1395.  
  1396.  bsr PAUSEOPTS
  1397.  
  1398.  
  1399.  st doanything
  1400. .nopause: 
  1401.  
  1402.  move.l hitcol,d0
  1403.  move.l d0,d1
  1404.  add.l #PALETTEBIT,d1
  1405.  move.l d1,$dff084
  1406.  tst.l d0
  1407.  beq.s nofadedownhc
  1408.  sub.l #2116,d0
  1409.  move.l d0,hitcol
  1410. nofadedownhc:
  1411.  
  1412.  st READCONTROLS
  1413.  move.l #$dff000,a6
  1414.  
  1415.  
  1416.  cmp.b #'n',mors
  1417.  beq .nopause
  1418.  
  1419.  move.b SLAVEPAUSE,d0
  1420.  or.b MASTERPAUSE,d0
  1421.  beq.s .nopause
  1422.  clr.b doanything
  1423.  
  1424.  move.l #KeyMap,a5
  1425. .waitrel:
  1426.  
  1427.  
  1428.  cmp.b #'s',mors
  1429.  beq.s .RE2
  1430.  tst.b PLR1JOY
  1431.  beq.s .NOJOY
  1432.  jsr _ReadJoy1
  1433.  bra .RE1
  1434. .RE2:
  1435.  tst.b PLR2JOY
  1436.  beq.s .NOJOY
  1437.  jsr _ReadJoy2
  1438. .RE1
  1439. .NOJOY:
  1440.  tst.b $19(a5)
  1441.  bne.s .waitrel
  1442.  
  1443.  bsr PAUSEOPTS
  1444.  
  1445.  cmp.b #'m',mors
  1446.  bne.s .slavelast
  1447.  Jsr SENDFIRST
  1448.  bra .masfirst
  1449. .slavelast
  1450.  Jsr RECFIRST
  1451. .masfirst:
  1452.  clr.b SLAVEPAUSE
  1453.  clr.b MASTERPAUSE
  1454.  st doanything
  1455.  
  1456. .nopause: 
  1457.  
  1458.  
  1459.  
  1460.  move.l drawpt,d0
  1461.  move.l olddrawpt,drawpt
  1462.  move.l d0,olddrawpt
  1463.  
  1464.  move.l SCRNDRAWPT,d0
  1465.  move.l SCRNSHOWPT,SCRNDRAWPT
  1466.  move.l d0,SCRNSHOWPT
  1467.  
  1468.  move.l d0,d1
  1469.  move.l d1,d0
  1470.  move.w d0,pl1l
  1471.  swap d0
  1472.  move.w d0,pl1h
  1473.  
  1474.  add.l #10240,d1
  1475.  move.l d1,d0
  1476.  move.w d0,pl2l
  1477.  swap d0
  1478.  move.w d0,pl2h
  1479.  
  1480.  add.l #10240,d1
  1481.  move.l d1,d0
  1482.  move.w d0,pl3l
  1483.  swap d0
  1484.  move.w d0,pl3h
  1485.  
  1486.  add.l #10240,d1
  1487.  move.l d1,d0
  1488.  move.w d0,pl4l
  1489.  swap d0
  1490.  move.w d0,pl4h
  1491.  
  1492.  add.l #10240,d1
  1493.  move.l d1,d0
  1494.  move.w d0,pl5l
  1495.  swap d0
  1496.  move.w d0,pl5h
  1497.  
  1498.  add.l #10240,d1
  1499.  move.l d1,d0
  1500.  move.w d0,pl6l
  1501.  swap d0
  1502.  move.w d0,pl6h
  1503.  
  1504.  add.l #10240,d1
  1505.  move.l d1,d0
  1506.  move.w d0,pl7l
  1507.  swap d0
  1508.  move.w d0,pl7h
  1509.  
  1510.  add.l #10240,d1
  1511.  move.l d1,d0
  1512.  move.w d0,pl8l
  1513.  swap d0
  1514.  move.w d0,pl8h
  1515.  
  1516.  
  1517. ; move.l d0,$dff084    
  1518.  move.l drawpt,a3
  1519. ; move.l COPSCRNBUFF,a3
  1520.  adda.w #10,a3
  1521.  move.l a3,frompt
  1522.  add.l #104*4*40,a3
  1523.  move.l a3,midpt
  1524.  
  1525.  cmp.b #'s',mors
  1526.  beq.s nowaitslave
  1527.  
  1528. waitfortop:
  1529.  
  1530.  btst.b #0,intreqrl(a6)
  1531.  beq.b waitfortop
  1532.  
  1533.  move.w #$1,intreq(a6)
  1534.  move.l #PLR1_GunData,GunData
  1535.  move.b PLR1_GunSelected,GunSelected
  1536.  bra waitmaster
  1537.  
  1538. nowaitslave:
  1539.  move.l #PLR2_GunData,GunData
  1540.  move.b PLR2_GunSelected,GunSelected
  1541. waitmaster:
  1542.  
  1543.  move.l #SMIDDLEY,a0
  1544.  movem.l (a0)+,d0/d1
  1545.  move.l d0,MIDDLEY
  1546.  move.l d1,MIDDLEY+4
  1547.  
  1548.  move.l waterpt,a0
  1549.  move.l (a0)+,watertouse
  1550.  cmp.l #endwaterlist,a0
  1551.  blt.s okwat
  1552.  move.l #waterlist,a0
  1553. okwat:
  1554.  move.l a0,waterpt
  1555.  
  1556.  add.w #640,wtan
  1557.  and.w #8191,wtan
  1558.  add.l #$100,wateroff
  1559.  and.l #$3fff,wateroff
  1560.  
  1561.  move.l GunData,a6
  1562.  moveq #0,d0
  1563.  move.b GunSelected,d0
  1564.  lsl.w #2,d0
  1565.  lea (a6,d0.w*8),a6
  1566.  move.w (a6),d0
  1567.  asr.w #3,d0
  1568.  move.w d0,Ammo
  1569.  
  1570.  move.l PLR1_xoff,OLDX1
  1571.  move.l PLR1_zoff,OLDZ1
  1572.  move.l PLR2_xoff,OLDX2
  1573.  move.l PLR2_zoff,OLDZ2
  1574.  
  1575.  
  1576.  
  1577.  move.l #$dff000,a6
  1578.  
  1579.  cmp.b #'s',mors
  1580.  beq ASlaveShouldWaitOnHisMaster
  1581.  
  1582.  cmp.b #'n',mors
  1583.  bne NotOnePlayer
  1584.  
  1585.  move.w PLR1_energy,Energy
  1586.  move.w FramesToDraw,TempFrames
  1587.  cmp.w #15,TempFrames
  1588.  blt.s .okframe
  1589.  move.w #15,TempFrames
  1590. .okframe:
  1591.  move.w #0,FramesToDraw
  1592.  
  1593. *********************************************
  1594. *********** TAKE THIS OUT *******************
  1595. *********************************************
  1596.  
  1597.  move.l CHEATPTR,a4
  1598.  add.l #200000,a4
  1599.  moveq #0,d0
  1600.  move.b (a4),d0
  1601.  
  1602.  move.l #KeyMap,a5
  1603.  tst.b (a5,d0.w)
  1604.  beq.s .nocheat
  1605.  
  1606.  addq #1,a4
  1607.  cmp.l #ENDCHEAT,a4
  1608.  blt.s .nocheat
  1609.  cmp.w #0,CHEATNUM
  1610.  beq.s .nocheat
  1611.  sub.w #1,CHEATNUM
  1612.  move.l #CHEATFRAME,a4
  1613.  move.w #127,PLR1_energy
  1614.  bsr EnergyBar
  1615. .nocheat
  1616.  
  1617.  sub.l #200000,a4
  1618.  move.l a4,CHEATPTR
  1619.  
  1620. **********************************************
  1621. **********************************************
  1622. **********************************************
  1623.  
  1624.  move.l PLR1s_xoff,p1_xoff
  1625.  move.l PLR1s_zoff,p1_zoff
  1626.  move.l PLR1s_yoff,p1_yoff
  1627.  move.l PLR1s_height,p1_height
  1628.  move.w PLR1s_angpos,p1_angpos
  1629.  move.w PLR1_bobble,p1_bobble
  1630.  move.b PLR1_clicked,p1_clicked
  1631.  move.b PLR1_fire,p1_fire
  1632.  clr.b PLR1_clicked
  1633.  move.b PLR1_SPCTAP,p1_spctap
  1634.  clr.b PLR1_SPCTAP
  1635.  move.b PLR1_Ducked,p1_ducked
  1636.  move.b PLR1_GunSelected,p1_gunselected
  1637.  
  1638.  bsr PLR1_Control
  1639.  
  1640.  move.l PLR1_Roompt,a0
  1641.  move.l ToZoneRoof(a0),SplitHeight
  1642.  move.w p1_xoff,THISPLRxoff
  1643.  move.w p1_zoff,THISPLRzoff
  1644.  
  1645.  
  1646.  move.l #$60000,p2_yoff
  1647.  move.l PLR2_Obj,a0
  1648.  move.w #-1,GraphicRoom(a0)
  1649.  move.w #-1,12(a0)
  1650.  move.b #0,17(a0)
  1651.  move.l #BollocksRoom,PLR2_Roompt
  1652.  
  1653.  bra donetalking
  1654.  
  1655. NotOnePlayer:
  1656.  move.l #KeyMap,a5
  1657.  tst.b $19(a5)
  1658.  sne MASTERPAUSE
  1659.  
  1660. *********************************
  1661.  move.w PLR1_energy,Energy
  1662. ; change this back
  1663. *********************************
  1664.  
  1665.  jsr SENDFIRST
  1666.  
  1667.  move.w FramesToDraw,TempFrames
  1668.  cmp.w #15,TempFrames
  1669.  blt.s .okframe
  1670.  move.w #15,TempFrames
  1671. .okframe:
  1672.  move.w #0,FramesToDraw
  1673.  
  1674.  move.l PLR1s_xoff,p1_xoff
  1675.  move.l PLR1s_zoff,p1_zoff
  1676.  move.l PLR1s_yoff,p1_yoff
  1677.  move.l PLR1s_height,p1_height
  1678.  move.w PLR1s_angpos,p1_angpos
  1679.  move.w PLR1_bobble,p1_bobble
  1680.  move.b PLR1_clicked,p1_clicked
  1681.  clr.b PLR1_clicked
  1682.  move.b PLR1_fire,p1_fire
  1683.  move.b PLR1_SPCTAP,p1_spctap
  1684.  clr.b PLR1_SPCTAP
  1685.  move.b PLR1_Ducked,p1_ducked
  1686.  move.b PLR1_GunSelected,p1_gunselected
  1687.  
  1688.  move.l p1_xoff,d0
  1689.  jsr SENDFIRST
  1690.  move.l d0,p2_xoff
  1691.  
  1692.  move.l p1_zoff,d0
  1693.  jsr SENDFIRST
  1694.  move.l d0,p2_zoff 
  1695.  
  1696.  move.l p1_yoff,d0
  1697.  jsr SENDFIRST
  1698.  move.l d0,p2_yoff
  1699.   
  1700.  move.l p1_height,d0
  1701.  jsr SENDFIRST
  1702.  move.l d0,p2_height
  1703.  
  1704.  move.w p1_angpos,d0
  1705.  swap d0
  1706.  move.w p1_bobble,d0
  1707.  jsr SENDFIRST
  1708.  move.w d0,p2_bobble
  1709.  swap d0
  1710.  move.w d0,p2_angpos
  1711.  
  1712.  
  1713.  move.w TempFrames,d0
  1714.  swap d0
  1715.  move.b p1_spctap,d0
  1716.  lsl.w #8,d0
  1717.  move.b p1_clicked,d0
  1718.  jsr SENDFIRST
  1719.  move.b d0,p2_clicked
  1720.  lsr.w #8,d0
  1721.  move.b d0,p2_spctap
  1722.  
  1723.  
  1724.  move.w Rand1,d0
  1725.  swap d0
  1726.  move.b p1_ducked,d0
  1727.  lsl.w #8,d0
  1728.  move.b p1_gunselected,d0
  1729.  jsr SENDFIRST
  1730.  move.b d0,p2_gunselected
  1731.  lsr.w #8,d0
  1732.  move.b d0,p2_ducked
  1733.  
  1734.  move.b p1_fire,d0
  1735.  lsl.w #8,d0
  1736.  move.b MASTERQUITTING,d0
  1737.  or.b d0,SLAVEQUITTING
  1738.  swap d0
  1739.  move.b MASTERPAUSE,d0
  1740.  or.b d0,SLAVEPAUSE
  1741.  jsr SENDFIRST
  1742.  or.b d0,MASTERPAUSE
  1743.  or.b d0,SLAVEPAUSE
  1744.  swap d0
  1745.  or.b d0,SLAVEQUITTING
  1746.  or.b d0,MASTERQUITTING
  1747.  lsr.w #8,d0
  1748.  move.b d0,p2_fire
  1749.  
  1750.  bsr PLR1_Control
  1751.  bsr PLR2_Control
  1752.  move.l PLR1_Roompt,a0
  1753.  move.l ToZoneRoof(a0),SplitHeight
  1754.  move.w p1_xoff,THISPLRxoff
  1755.  move.w p1_zoff,THISPLRzoff
  1756.  
  1757.  bra donetalking
  1758.  
  1759. ASlaveShouldWaitOnHisMaster:
  1760.  
  1761.  move.l #KeyMap,a5
  1762.  tst.b $19(a5)
  1763.  sne SLAVEPAUSE
  1764.  
  1765.  
  1766.  move.w PLR2_energy,Energy
  1767.  
  1768.  jsr RECFIRST
  1769.  
  1770.  move.l PLR2s_xoff,p2_xoff
  1771.  move.l PLR2s_zoff,p2_zoff
  1772.  move.l PLR2s_yoff,p2_yoff
  1773.  move.l PLR2s_height,p2_height
  1774.  move.w PLR2s_angpos,p2_angpos
  1775.  move.w PLR2_bobble,p2_bobble
  1776.  move.b PLR2_clicked,p2_clicked
  1777.  clr.b PLR2_clicked
  1778.  move.b PLR2_fire,p2_fire
  1779.  move.b PLR2_SPCTAP,p2_spctap
  1780.  clr.b PLR2_SPCTAP
  1781.  move.b PLR2_Ducked,p2_ducked
  1782.  move.b PLR2_GunSelected,p2_gunselected
  1783.  
  1784.  move.l p2_xoff,d0
  1785.  jsr RECFIRST
  1786.  move.l d0,p1_xoff
  1787.  
  1788.  move.l p2_zoff,d0
  1789.  jsr RECFIRST
  1790.  move.l d0,p1_zoff
  1791.  
  1792.  move.l p2_yoff,d0
  1793.  jsr RECFIRST
  1794.  move.l d0,p1_yoff
  1795.  
  1796.  move.l p2_height,d0
  1797.  jsr RECFIRST
  1798.  move.l d0,p1_height
  1799.  
  1800.  move.w p2_angpos,d0
  1801.  swap d0
  1802.  move.w p2_bobble,d0
  1803.  jsr RECFIRST
  1804.  move.w d0,p1_bobble
  1805.  swap d0
  1806.  move.w d0,p1_angpos
  1807.  
  1808.  
  1809.  move.b p2_spctap,d0
  1810.  lsl.w #8,d0
  1811.  move.b p2_clicked,d0
  1812.  jsr RECFIRST
  1813.  move.b d0,p1_clicked
  1814.  lsr.w #8,d0
  1815.  move.b d0,p1_spctap
  1816.  swap d0
  1817.  move.w d0,TempFrames
  1818.  
  1819.  
  1820.  move.b p2_ducked,d0
  1821.  lsl.w #8,d0
  1822.  move.b p2_gunselected,d0
  1823.  jsr RECFIRST
  1824.  move.b d0,p1_gunselected
  1825.  lsr.w #8,d0
  1826.  move.b d0,p1_ducked
  1827.  swap d0
  1828.  move.w d0,Rand1
  1829.  
  1830.  move.b p2_fire,d0
  1831.  lsl.w #8,d0
  1832.  move.b SLAVEQUITTING,d0
  1833.  or.b d0,MASTERQUITTING
  1834.  swap d0
  1835.  move.b SLAVEPAUSE,d0
  1836.  or.b d0,MASTERPAUSE
  1837.  jsr RECFIRST
  1838.  or.b d0,MASTERPAUSE
  1839.  or.b d0,SLAVEPAUSE
  1840.  swap d0
  1841.  or.b d0,SLAVEQUITTING
  1842.  or.b d0,MASTERQUITTING
  1843.  lsr.w #8,d0
  1844.  move.b d0,p1_fire
  1845.  
  1846.  
  1847.  bsr PLR1_Control
  1848.  bsr PLR2_Control
  1849.  move.w p2_xoff,THISPLRxoff
  1850.  move.w p2_zoff,THISPLRzoff
  1851.  move.l PLR2_Roompt,a0
  1852.  move.l ToZoneRoof(a0),SplitHeight
  1853.  
  1854. donetalking:
  1855.  
  1856.  
  1857.  
  1858.  
  1859.  move.l #ZoneBrightTable,a1
  1860.  move.l ZoneAdds,a2
  1861.  move.l PLR2_ListOfGraphRooms,a0
  1862.  move.l PLR2_PointsToRotatePtr,a5
  1863.  cmp.b #'s',mors
  1864.  beq.s doallz
  1865.  move.l PLR1_ListOfGraphRooms,a0
  1866.  move.l PLR1_PointsToRotatePtr,a5
  1867.  
  1868. doallz
  1869.  move.w (a0),d0
  1870.  blt.s doneallz
  1871.  add.w #8,a0
  1872.  
  1873.  move.l (a2,d0.w*4),a3
  1874.  add.l LEVELDATA,a3
  1875.  move.w ToZoneBrightness(a3),d2
  1876.  
  1877.  blt.s justbright
  1878.  move.w d2,d3
  1879.  lsr.w #8,d3
  1880.  tst.b d3
  1881.  beq.s justbright
  1882.  
  1883.  move.l #BrightAnimTable,a4
  1884.  move.w -2(a4,d3.w*2),d2
  1885.  
  1886. justbright:
  1887.  muls #32,d2
  1888.  divs #20,d2
  1889.  move.w d2,(a1,d0.w*4)
  1890.  
  1891.  move.w ToUpperBrightness(a3),d2
  1892.  
  1893.  blt.s justbright2
  1894.  move.w d2,d3
  1895.  lsr.w #8,d3
  1896.  tst.b d3
  1897.  beq.s justbright2
  1898.  
  1899.  move.l #BrightAnimTable,a4
  1900.  move.w -2(a4,d3.w*2),d2
  1901.  
  1902. justbright2:
  1903.  
  1904.  muls #32,d2
  1905.  divs #20,d2
  1906.  move.w d2,2(a1,d0.w*4)
  1907.  
  1908.  bra doallz
  1909.  
  1910. doneallz:
  1911.  
  1912.  move.l PointBrights,a2
  1913.  move.l #CurrentPointBrights,a3
  1914. justtheone:
  1915.  move.w (a5)+,d0
  1916.  blt whythehell
  1917.  move.w (a2,d0.w*4),d2
  1918.  
  1919.  tst.b d2
  1920.  blt.s .justbright
  1921.  move.w d2,d3
  1922.  lsr.w #8,d3
  1923.  tst.b d3
  1924.  beq.s .justbright
  1925.  
  1926.  move.w d3,d4
  1927.  and.w #$f,d3
  1928.  lsr.w #4,d4
  1929.  add.w #1,d4
  1930.  
  1931.  move.l #BrightAnimTable,a0
  1932.  move.w -2(a0,d3.w*2),d3
  1933.  ext.w d2
  1934.  sub.w d2,d3
  1935.  muls d4,d3
  1936.  asr.w #4,d3
  1937.  add.w d3,d2
  1938.  
  1939. .justbright:
  1940.  ext.w d2
  1941.  
  1942.  muls #31,d2
  1943.  divs #20,d2
  1944.  
  1945.  move.w d2,(a3,d0.w*4)
  1946.  move.w 2(a2,d0.w*4),d2
  1947.  
  1948.  tst.b d2
  1949.  blt.s .justbright2
  1950.  move.w d2,d3
  1951.  lsr.w #8,d3
  1952.  tst.b d3
  1953.  beq.s .justbright2
  1954.  
  1955.  move.w d3,d4
  1956.  and.w #$f,d3
  1957.  lsr.w #4,d4
  1958.  add.w #1,d4
  1959.  
  1960.  move.l #BrightAnimTable,a0
  1961.  move.w -2(a0,d3.w*2),d3
  1962.  ext.w d2
  1963.  sub.w d2,d3
  1964.  muls d4,d3
  1965.  asr.w #4,d3
  1966.  add.w d3,d2
  1967.  
  1968. .justbright2:
  1969.  ext.w d2
  1970.  muls #31,d2
  1971.  divs #20,d2
  1972.  
  1973.  move.w d2,2(a3,d0.w*4)
  1974.  
  1975.  bra justtheone
  1976.  
  1977. whythehell:
  1978.  
  1979.  cmp.b #'n',mors
  1980.  beq nosee
  1981.  
  1982.  move.l PLR1_Roompt,FromRoom
  1983.  move.l PLR2_Roompt,ToRoom
  1984.  move.w p1_xoff,Viewerx
  1985.  move.w p1_zoff,Viewerz
  1986.  move.l p1_yoff,d0
  1987.  asr.l #7,d0
  1988.  move.w d0,Viewery
  1989.  move.w p2_xoff,Targetx
  1990.  move.w p2_zoff,Targetz
  1991.  move.l p2_yoff,d0
  1992.  asr.l #7,d0
  1993.  move.w d0,Targety
  1994.  move.b PLR1_StoodInTop,ViewerTop
  1995.  move.b PLR2_StoodInTop,TargetTop
  1996.  jsr CanItBeSeen
  1997.  
  1998.  move.l PLR1_Obj,a0
  1999.  move.b CanSee,d0
  2000.  and.b #2,d0
  2001.  move.b d0,17(a0)
  2002.  move.l PLR2_Obj,a0
  2003.  move.b CanSee,d0
  2004.  and.b #1,d0
  2005.  move.b d0,17(a0)
  2006.  
  2007. nosee:
  2008.  
  2009.  move.l PLR1_Obj,a0
  2010.  move.b #5,16(a0)
  2011.  move.l PLR2_Obj,a0
  2012.  move.b #11,16(a0)
  2013.  
  2014.  move.w TempFrames,d0
  2015.  add.w d0,p1_holddown
  2016.  cmp.w #30,p1_holddown
  2017.  blt.s oklength
  2018.  move.w #30,p1_holddown
  2019. oklength:
  2020.  
  2021.  tst.b p1_fire
  2022.  bne.s okstillheld
  2023.  sub.w d0,p1_holddown
  2024.  bge.s okstillheld
  2025.  move.w #0,p1_holddown
  2026.  
  2027. okstillheld:
  2028.  
  2029.  move.w TempFrames,d0
  2030.  add.w d0,p2_holddown
  2031.  
  2032.  cmp.w #30,p2_holddown
  2033.  blt.s oklength2
  2034.  move.w #30,p2_holddown
  2035. oklength2:
  2036.  
  2037.  
  2038.  tst.b p2_fire
  2039.  bne.s okstillheld2
  2040.  sub.w d0,p2_holddown
  2041.  bge.s okstillheld2
  2042.  move.w #0,p2_holddown
  2043. okstillheld2:
  2044.  
  2045. ; move.l #PLR1_GunData,a1
  2046. ; move.w p1_holddown,d0
  2047. ; move.w #50,10+32*3(a1)
  2048. ; move.l #PLR2_GunData,a1
  2049. ; move.w p2_holddown,d0
  2050. ; move.w #50,10+32*3(a1)
  2051.  
  2052.  
  2053. ******************************************
  2054. ******************************************
  2055.  
  2056.  move.w TempFrames,d1
  2057.  bgt.s noze
  2058.  moveq #1,d1
  2059. noze:
  2060.  
  2061.  move.w PLR1_xoff,d0
  2062.  sub.w OLDX1,d0
  2063.  asl.w #4,d0
  2064.  ext.l d0
  2065.  divs d1,d0
  2066.  move.w d0,XDIFF1
  2067.  move.w PLR2_xoff,d0
  2068.  sub.w OLDX2,d0
  2069.  asl.w #4,d0
  2070.  ext.l d0
  2071.  divs d1,d0
  2072.  move.w d0,XDIFF2
  2073.  move.w PLR1_zoff,d0
  2074.  sub.w OLDZ1,d0
  2075.  asl.w #4,d0
  2076.  ext.l d0
  2077.  divs d1,d0
  2078.  move.w d0,ZDIFF1
  2079.  move.w PLR2_zoff,d0
  2080.  sub.w OLDZ2,d0
  2081.  asl.w #4,d0
  2082.  ext.l d0
  2083.  divs d1,d0
  2084.  move.w d0,ZDIFF2
  2085.  
  2086.  cmp.b #'s',mors
  2087.  beq.s ImPlayer2OhYesIAm
  2088.  bsr USEPLR1
  2089.  bra IWasPlayer1
  2090.  
  2091. ImPlayer2OhYesIAm:
  2092.  bsr USEPLR2
  2093. IWasPlayer1:
  2094.  
  2095.  
  2096.  cmp.b #'s',mors
  2097.  beq drawplayer2
  2098.  
  2099.  move.w #0,scaleval
  2100.  
  2101.  move.l PLR1_xoff,xoff
  2102.  move.l PLR1_yoff,yoff
  2103.  move.l PLR1_zoff,zoff
  2104.  move.w PLR1_angpos,angpos
  2105.  move.w PLR1_cosval,cosval
  2106.  move.w PLR1_sinval,sinval
  2107.  
  2108.  
  2109.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  2110.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  2111.  move.l PLR1_Roompt,Roompt
  2112.  
  2113.  bsr OrderZones
  2114.  jsr objmoveanim
  2115.  bsr EnergyBar
  2116.  bsr AmmoBar
  2117.  
  2118.  move.w #0,leftclip
  2119.  move.w #RIGHTX+1,rightclip
  2120.  move.w #0,deftopclip
  2121.  
  2122.  move.w #BOTTOMY,defbotclip
  2123.  move.w #0,topclip
  2124.  move.w #BOTTOMY,botclip
  2125. ; sub.l #10*104*4,frompt
  2126. ; sub.l #10*104*4,midpt
  2127.  
  2128. * Subroom loop
  2129.  
  2130.  
  2131.  bsr DrawDisplay 
  2132.  
  2133.  bra nodrawp2
  2134.  
  2135. drawplayer2
  2136.  
  2137.  move.w #0,scaleval
  2138.  move.l PLR2_xoff,xoff
  2139.  move.l PLR2_yoff,yoff
  2140.  move.l PLR2_zoff,zoff
  2141.  move.w PLR2_angpos,angpos
  2142.  move.w PLR2_cosval,cosval
  2143.  move.w PLR2_sinval,sinval 
  2144.  
  2145.  
  2146.  
  2147.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  2148.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  2149.  move.l PLR2_Roompt,Roompt
  2150.  
  2151.  bsr OrderZones
  2152.  jsr objmoveanim
  2153.  bsr EnergyBar
  2154.  bsr AmmoBar
  2155.  
  2156.  move.w #0,leftclip
  2157.  move.w #RIGHTX+1,rightclip
  2158.  move.w #0,deftopclip
  2159.  move.w #BOTTOMY,defbotclip
  2160.  move.w #0,topclip
  2161.  move.w #BOTTOMY,botclip
  2162.  
  2163.  bsr DrawDisplay
  2164.  
  2165. nodrawp2:
  2166.  
  2167. ***************************************** 
  2168. * Copy from copbuff to chip ram
  2169.  
  2170.  
  2171. ; move.l drawpt,a3
  2172. ; adda.w #10,a3
  2173. ; move.l COPSCRNBUFF,a2
  2174. ; move.w #2,d6
  2175. ; adda.w #10,a2
  2176. ;COPYOUT
  2177. ; move.w #31,d0
  2178. ;COPYDOWN1:
  2179. ; move.w #3,d1
  2180. ; move.l a2,a4
  2181. ; move.l a3,a5
  2182. ;.inlop1:
  2183. ;val SET 0
  2184. ; REPT 20
  2185. ; move.w val(a4),val(a5)
  2186. ;val SET val+104*4
  2187. ; ENDR
  2188. ; adda.l #104*4*20,a4
  2189. ; adda.l #104*4*20,a5
  2190. ; dbra d1,.inlop1
  2191. ; addq #4,a2
  2192. ; addq #4,a3
  2193. ; dbra d0,COPYDOWN1
  2194. ; addq #4,a2
  2195. ; addq #4,a3
  2196. ; dbra d6,COPYOUT 
  2197.  
  2198.  
  2199.  move.l FASTBUFFER,a0
  2200. ; add.l #320*2*20,a0
  2201.  move.l SCRNDRAWPT,a1
  2202. ; add.l #2+40*20,a1
  2203.  move.l #(288/8)-1,d0
  2204.  move.l #239,d1
  2205.  move.w #(320-288)*2,d2
  2206.  move.w #4,d3
  2207.  jsr CHUNKYTOPLANAR 
  2208.  
  2209.  move.l #KeyMap,a5
  2210.  tst.b (a5)
  2211.  beq.s .nosavescrn
  2212.  
  2213.  jsr SAVETHESCREEN
  2214.  
  2215. .nosavescrn:
  2216.  
  2217. ***************************************** 
  2218.  move.l PLR2_Roompt,a0
  2219.  move.l #WorkSpace,a1
  2220.  clr.l (a1)
  2221.  clr.l 4(a1)
  2222.  clr.l 8(a1)
  2223.  clr.l 12(a1)
  2224.  clr.l 16(a1)
  2225.  clr.l 20(a1)
  2226.  clr.l 24(a1)
  2227.  clr.l 28(a1)
  2228.  
  2229.  cmp.b #'n',mors
  2230.  beq.s plr1only
  2231.  
  2232.  lea ToListOfGraph(a0),a0
  2233. .doallrooms:
  2234.  move.w (a0),d0
  2235.  blt.s .allroomsdone
  2236.  addq #8,a0
  2237.  move.w d0,d1
  2238.  asr.w #3,d0
  2239.  bset d1,(a1,d0.w)
  2240.  bra .doallrooms
  2241. .allroomsdone:
  2242.  
  2243. plr1only:
  2244.  
  2245.  move.l PLR1_Roompt,a0
  2246.  lea ToListOfGraph(a0),a0
  2247. .doallrooms2:
  2248.  move.w (a0),d0
  2249.  blt.s .allroomsdone2
  2250.  addq #8,a0
  2251.  move.w d0,d1
  2252.  asr.w #3,d0
  2253.  bset d1,(a1,d0.w)
  2254.  bra .doallrooms2
  2255. .allroomsdone2:
  2256.  
  2257.  move.l #%011110111000101000001,d7
  2258.  lea TEAMWORK,a2
  2259.  move.l ObjectData,a0
  2260.  sub.w #64,a0
  2261. .doallobs:
  2262.  add.w #64,a0
  2263.  move.w (a0),d0
  2264.  blt.s .allobsdone
  2265.  move.w 12(a0),d0
  2266.  blt.s .doallobs
  2267.  move.w d0,d1
  2268.  asr.w #3,d0
  2269.  btst d1,(a1,d0.w)
  2270.  bne.s .worryobj
  2271.  move.b 16(a0),d0
  2272.  btst d0,d7
  2273.  beq.s .doallobs
  2274.  moveq #0,d0
  2275.  move.b teamnumber(a0),d0
  2276.  blt.s .doallobs
  2277.  asl.w #4,d0
  2278.  tst.w SEENBY(a2,d0.w)
  2279.  blt.s .doallobs
  2280. .worryobj:
  2281.  or.b #127,worry(a0)
  2282.  bra.s .doallobs
  2283. .allobsdone:
  2284.  
  2285.  
  2286.  
  2287. ; move.l #brightentab,a0
  2288. ; move.l frompt,a3
  2289. ; adda.w #(4*33)+(104*4*20),a3
  2290. ; move.w #20,d7
  2291. ; move.w #20,d6
  2292. ;horl:
  2293. ; move.w d6,d5
  2294. ; move.l a3,a1
  2295. ;vertl
  2296. ; move.w (a1),d0
  2297. ; move.w (a0,d0.w*2),(a1)
  2298. ; addq #4,a1
  2299. ; dbra d5,vertl
  2300. ; adda.w #104*4,a3
  2301. ; dbra d7,horl
  2302.  
  2303.  move.l #$dff000,a6
  2304.  
  2305. ; move.w #$300,col0(a6)
  2306.  
  2307.  move.l #KeyMap,a5
  2308.  tst.b $45(a5)
  2309.  beq.s noend
  2310.  
  2311.  cmp.b #'s',mors
  2312.  beq plr2quit 
  2313.  
  2314.  st MASTERQUITTING
  2315.  bra noend
  2316.  
  2317. plr2quit:
  2318.  st SLAVEQUITTING
  2319. noend:
  2320.  
  2321.  tst.b MASTERQUITTING
  2322.  beq.s .noquit
  2323.  tst.b SLAVEQUITTING
  2324.  bne endnomusic
  2325. .noquit
  2326.  
  2327.  cmp.b #'n',mors
  2328.  bne.s noexit
  2329.  move.l PLR1_Roompt,a0
  2330.  move.w (a0),d0
  2331.  move.w PLOPT,d1
  2332.  move.l #ENDZONES,a0
  2333.  cmp.w (a0,d1.w*2),d0
  2334.  
  2335. ; change this for quick exit, charlie
  2336. zzzz:
  2337. ; bra end
  2338.  
  2339.  beq end
  2340. noexit:
  2341.  
  2342.  tst.w PLR1_energy
  2343.  ble end
  2344.  tst.w PLR2_energy
  2345.  ble end
  2346.  
  2347. ; move.l SwitchData,a0
  2348. ; tst.b 24+8(a0)
  2349. ; bne end
  2350.   
  2351. ; JSR STOPTIMER
  2352.  
  2353.  bra lop
  2354.  
  2355. SAVETHESCREEN:
  2356.  
  2357.  move.l doslib,a6
  2358.  move.l #SAVENAME,d1
  2359.  move.l #1006,d2
  2360.  jsr -30(a6)
  2361.  move.l d0,handle
  2362.  
  2363.  move.l doslib,a6
  2364.  move.l #scrn,d2
  2365.  move.l handle,d1
  2366.  move.l #10240*8,d3
  2367.  jsr _LVOWrite(a6)
  2368.  
  2369.  move.l doslib,a6
  2370.  move.l handle,d1
  2371.  jsr -36(a6)
  2372.  
  2373.  add.b #1,SAVELETTER
  2374.  
  2375.  rts
  2376.  
  2377. SAVENAME: dc.b 'df0:rawscrn'
  2378. SAVELETTER: dc.b 'd',0
  2379.  
  2380.  even
  2381.  
  2382.  include "ab3:source_4000/CHUNKY.s"
  2383.  
  2384.  
  2385. MASTERQUITTING: dc.b 0
  2386. SLAVEQUITTING: dc.b 0
  2387. MASTERPAUSE: dc.b 0
  2388. SLAVEPAUSE: dc.b 0
  2389.  
  2390. PAUSEOPTS:
  2391.  include "ab3:source_4000/pauseopts"
  2392.  
  2393. ENDZONES:
  2394. ; LEVEL 1
  2395.  dc.w -1
  2396. ; dc.w 55
  2397. ; LEVEL 2
  2398.  dc.w 149
  2399. ; LEVEL 3
  2400.  dc.w 155
  2401. ; LEVEL 4
  2402.  dc.w 107
  2403. ; LEVEL 5
  2404.  dc.w 67
  2405. ; LEVEL 6
  2406.  dc.w 132
  2407. ; LEVEL 7
  2408.  dc.w 203
  2409. ; LEVEL 8
  2410.  dc.w 166
  2411. ; LEVEL 9
  2412.  dc.w 118
  2413. ; LEVEL 10
  2414.  dc.w 102
  2415. ; LEVEL 11
  2416.  dc.w 103
  2417. ; LEVEL 12
  2418.  dc.w 2
  2419. ; LEVEL 13
  2420.  dc.w 98
  2421. ; LEVEL 14
  2422.  dc.w 0
  2423. ; LEVEL 15
  2424.  dc.w 148
  2425. ; LEVEL 16
  2426.  dc.w 103
  2427.  
  2428. ***************************************************************************
  2429. ***************************************************************************
  2430. ****************** End of Main Loop here ********************************** 
  2431. ***************************************************************************
  2432. ***************************************************************************
  2433.  
  2434. putinsmallscr:
  2435.  
  2436.  rts
  2437.  
  2438.  move.l #$1fe0000,statskip
  2439.  move.l #$1fe0000,statskip+4
  2440.  
  2441.  move.l #healthpal,a5
  2442.  move.l COPSCRN1,a0
  2443.  move.l COPSCRN2,a2
  2444.  move.w #scrheight-1,d0
  2445.  move.l #0,d6
  2446.  move.w #0,d3
  2447.  move.w #$2bdf,startwait
  2448.  move.w #$2d01,endwait
  2449. .fillcop
  2450.  move.w #$180,d1
  2451.  
  2452.  move.l a0,a1
  2453.  move.l a2,a3
  2454.  move.w #$10c,(a1)+
  2455.  move.w #$10c,(a3)+
  2456.  move.w d3,(a1)+
  2457.  move.w d3,(a3)+
  2458.  eor.w #$8000,d3
  2459.  
  2460.  move.w #$106,(a1)+
  2461.  move.w #$106,(a3)+
  2462.  move.w #$2c42,d5
  2463.  or.w d3,d5
  2464.  and.w #$fffe,d5
  2465.  move.w d5,(a1)+
  2466.  move.w d5,(a3)+
  2467.  bsr do32
  2468.  
  2469.  move.w #$106,(a1)+
  2470.  move.w #$106,(a3)+
  2471.  move.w #$4c42,d5
  2472.  or.w d3,d5
  2473.  and.w #$fffe,d5
  2474.  move.w d5,(a1)+
  2475.  move.w d5,(a3)+
  2476.  bsr do32
  2477.  
  2478.  move.w #$106,(a1)+
  2479.  move.w #$106,(a3)+
  2480.  move.w #$6c42,d5
  2481.  or.w d3,d5
  2482.  and.w #$fffe,d5
  2483.  move.w d5,(a1)+
  2484.  move.w d5,(a3)+
  2485.  bsr do32
  2486.  
  2487.  
  2488.  move.l #$1060c42,(a1)+
  2489.  move.l #$1060c42,(a3)+
  2490.  move.w #$19e,(a1)+
  2491.  move.w (a5),(a1)+
  2492.  move.w #$19e,(a3)+
  2493.  move.w (a5)+,(a3)+
  2494.  
  2495. **********************************
  2496.  
  2497.  adda.w #104*4,a0
  2498.  adda.w #104*4,a2
  2499.  dbra d0,.fillcop
  2500.  
  2501.  move.w #$48,fetchstart
  2502.  move.w #$88,fetchstop
  2503.  move.w #$2cb1,winstart
  2504.  move.w #$2c91,winstop
  2505.  move.w #-24,modulo
  2506.  move.w #-24,modulo+4
  2507.  
  2508.  move.l #nullspr,d0
  2509.  move.w d0,s4l
  2510.  move.w d0,s5l
  2511.  move.w d0,s6l
  2512.  move.w d0,s7l
  2513.  swap d0
  2514.  move.w d0,s4h
  2515.  move.w d0,s5h
  2516.  move.w d0,s6h
  2517.  move.w d0,s7h 
  2518.  
  2519.  move.l #borders,d0
  2520.  move.w d0,s0l
  2521.  swap d0
  2522.  move.w d0,s0h
  2523.  move.l #borders+2592,d0
  2524.  move.w d0,s1l
  2525.  swap d0
  2526.  move.w d0,s1h
  2527.  move.l #borders+2592*2,d0
  2528.  move.w d0,s2l
  2529.  swap d0
  2530.  move.w d0,s2h
  2531.  move.l #borders+2592*3,d0
  2532.  move.w d0,s3l
  2533.  swap d0
  2534.  move.w d0,s3h
  2535.  
  2536.  
  2537.  move.l #scrn+40,a0
  2538.  move.l #scrn+160,a1
  2539.  move.l #scrn+280,a2
  2540.  move.l #smallscrntab,a3
  2541.  move.w #191,d7    ; counter
  2542.  move.w #0,d1    ; xpos
  2543. .plotscrnloop:
  2544.  move.b (a3)+,d0
  2545.  move.w d1,d2
  2546.  asr.w #3,d2
  2547.  move.b d1,d3
  2548.  not.b d3
  2549.  bclr.b d3,-40(a0,d2.w)
  2550.  bclr.b d3,(a0,d2.w)
  2551.  bclr.b d3,40(a0,d2.w)
  2552.  bclr.b d3,-40(a1,d2.w)
  2553.  bclr.b d3,(a1,d2.w)
  2554.  bclr.b d3,40(a1,d2.w)
  2555.  bclr.b d3,-40(a2,d2.w)
  2556.  btst #0,d0
  2557.  beq.s .nobp1
  2558.  bset.b d3,-40(a0,d2.w)
  2559. .nobp1:
  2560.  btst #1,d0
  2561.  beq.s .nobp2
  2562.  bset.b d3,(a0,d2.w)
  2563. .nobp2:
  2564.  btst #2,d0
  2565.  beq.s .nobp3
  2566.  bset.b d3,40(a0,d2.w)
  2567. .nobp3:
  2568.  btst #3,d0
  2569.  beq.s .nobp4
  2570.  bset.b d3,-40(a1,d2.w)
  2571. .nobp4:
  2572.  btst #4,d0
  2573.  beq.s .nobp5
  2574.  bset.b d3,(a1,d2.w)
  2575. .nobp5:
  2576.  btst #5,d0
  2577.  beq.s .nobp6
  2578.  bset.b d3,40(a1,d2.w)
  2579. .nobp6:
  2580.  btst #6,d0
  2581.  beq.s .nobp7
  2582.  bset.b d3,-40(a2,d2.w)
  2583. .nobp7:
  2584.  
  2585.  addq #1,d1
  2586.  
  2587.  dbra d7,.plotscrnloop
  2588.  
  2589.  
  2590.  rts
  2591.  
  2592. putinlargescr:
  2593.  
  2594.  move.l #$1000000,statskip
  2595.  move.l #$fffffffe,statskip+4
  2596.  
  2597.  move.l #healthpal,a5
  2598.  move.l COPSCRN1,a0
  2599.  move.l COPSCRN2,a2
  2600.  move.w #scrheight-1,d0
  2601.  move.l #0,d6
  2602.  move.w #0,d3
  2603.  move.w #$29df,startwait
  2604.  move.w #$2b01,endwait
  2605. .fillcop
  2606.  move.w #$180,d1
  2607.  
  2608.  move.l a0,a1
  2609.  move.l a2,a3
  2610.  move.w #$10c,(a1)+
  2611.  move.w #$10c,(a3)+
  2612.  move.w d3,(a1)+
  2613.  move.w d3,(a3)+
  2614.  eor.w #$8000,d3
  2615.  
  2616.  move.w #$106,(a1)+
  2617.  move.w #$106,(a3)+
  2618.  move.w #$2c42,d5
  2619.  or.w d3,d5
  2620.  and.w #$fffe,d5
  2621.  move.w d5,(a1)+
  2622.  move.w d5,(a3)+
  2623.  bsr do32
  2624.  
  2625.  move.w #$106,(a1)+
  2626.  move.w #$106,(a3)+
  2627.  move.w #$4c42,d5
  2628.  or.w d3,d5
  2629.  and.w #$fffe,d5
  2630.  move.w d5,(a1)+
  2631.  move.w d5,(a3)+
  2632.  bsr do32
  2633.  
  2634.  move.w #$106,(a1)+
  2635.  move.w #$106,(a3)+
  2636.  move.w #$6c42,d5
  2637.  or.w d3,d5
  2638.  and.w #$fffe,d5
  2639.  move.w d5,(a1)+
  2640.  move.w d5,(a3)+
  2641.  bsr do32
  2642.  
  2643.  move.w startwait,(a1)+
  2644.  move.w #$fffe,(a1)+
  2645.  move.w endwait,(a1)+
  2646.  move.w #$ff00,(a1)+
  2647.  move.w startwait,(a3)+
  2648.  move.w #$fffe,(a3)+
  2649.  move.w endwait,(a3)+
  2650.  move.w #$ff00,(a3)+
  2651.  
  2652. ; move.l $1fe0000,(a1)+
  2653. ; move.l $1fe0000,(a3)+
  2654. ; move.l $1fe0000,(a1)+
  2655. ; move.l $1fe0000,(a3)+
  2656.  
  2657.  
  2658.  add.w #$300,startwait
  2659.  add.w #$300,endwait
  2660.  
  2661. ; move.l #$1060c42,(a1)+
  2662. ; move.l #$1060c42,(a3)+
  2663. ; move.w #$19e,(a1)+
  2664. ; move.w (a5),(a1)+
  2665. ; move.w #$19e,(a3)+
  2666. ; move.w (a5)+,(a3)+
  2667.  
  2668. **********************************
  2669.  
  2670.  adda.w #104*4,a0
  2671.  adda.w #104*4,a2
  2672.  dbra d0,.fillcop
  2673.  
  2674.  move.w #$38,fetchstart
  2675.  move.w #$b8,fetchstop
  2676.  move.w #$2c81,winstart
  2677.  move.w #$2cc1,winstop
  2678.  move.w #-40,modulo
  2679.  move.w #-40,modulo+4
  2680.  
  2681.  move.l #nullspr,d0
  2682.  move.w d0,s0l
  2683.  move.w d0,s1l
  2684.  move.w d0,s2l
  2685.  move.w d0,s3l
  2686.  move.w d0,s4l
  2687.  move.w d0,s5l
  2688.  move.w d0,s6l
  2689.  move.w d0,s7l
  2690.  swap d0
  2691.  move.w d0,s0h
  2692.  move.w d0,s1h
  2693.  move.w d0,s2h
  2694.  move.w d0,s3h
  2695.  move.w d0,s4h
  2696.  move.w d0,s5h
  2697.  move.w d0,s6h
  2698.  move.w d0,s7h 
  2699.  
  2700.  move.l #scrn+40,a0
  2701.  move.l #scrn+160,a1
  2702.  move.l #scrn+280,a2
  2703.  move.l #scrntab,a3
  2704.  move.w #319,d7    ; counter
  2705.  move.w #0,d1    ; xpos
  2706. .plotscrnloop:
  2707.  move.b (a3)+,d0
  2708.  move.w d1,d2
  2709.  asr.w #3,d2
  2710.  move.b d1,d3
  2711.  not.b d3
  2712.  bclr.b d3,-40(a0,d2.w)
  2713.  bclr.b d3,(a0,d2.w)
  2714.  bclr.b d3,40(a0,d2.w)
  2715.  bclr.b d3,-40(a1,d2.w)
  2716.  bclr.b d3,(a1,d2.w)
  2717.  bclr.b d3,40(a1,d2.w)
  2718.  bclr.b d3,-40(a2,d2.w)
  2719.  btst #0,d0
  2720.  beq.s .nobp1
  2721.  bset.b d3,-40(a0,d2.w)
  2722. .nobp1:
  2723.  btst #1,d0
  2724.  beq.s .nobp2
  2725.  bset.b d3,(a0,d2.w)
  2726. .nobp2:
  2727.  btst #2,d0
  2728.  beq.s .nobp3
  2729.  bset.b d3,40(a0,d2.w)
  2730. .nobp3:
  2731.  btst #3,d0
  2732.  beq.s .nobp4
  2733.  bset.b d3,-40(a1,d2.w)
  2734. .nobp4:
  2735.  btst #4,d0
  2736.  beq.s .nobp5
  2737.  bset.b d3,(a1,d2.w)
  2738. .nobp5:
  2739.  btst #5,d0
  2740.  beq.s .nobp6
  2741.  bset.b d3,40(a1,d2.w)
  2742. .nobp6:
  2743.  btst #6,d0
  2744.  beq.s .nobp7
  2745.  bset.b d3,-40(a2,d2.w)
  2746. .nobp7:
  2747.  
  2748.  addq #1,d1
  2749.  
  2750.  dbra d7,.plotscrnloop
  2751.  
  2752.  rts
  2753.  
  2754. CLEARKEYBOARD:
  2755.  move.l #KeyMap,a5
  2756.  moveq #0,d0
  2757.  move.w #15,d1
  2758. clrloo:
  2759.  move.l d0,(a5)+
  2760.  move.l d0,(a5)+
  2761.  move.l d0,(a5)+
  2762.  move.l d0,(a5)+
  2763.  dbra d1,clrloo
  2764.  rts
  2765.  
  2766. READCONTROLS: dc.w 0
  2767.  
  2768. tstststst: dc.w 0
  2769.  
  2770. BollocksRoom:
  2771.  dc.w -1
  2772.  ds.l 50
  2773.  
  2774. GUNYOFFS:
  2775.  dc.w 20
  2776.  dc.w 20
  2777.  dc.w 0
  2778.  dc.w 20
  2779.  dc.w 20
  2780.  dc.w 0
  2781.  dc.w 0
  2782.  dc.w 20
  2783.  
  2784. USEPLR1:
  2785.  
  2786. ***********************************
  2787.  
  2788.  move.l PLR1_Obj,a0 
  2789.  move.l ObjectPoints,a1
  2790.  move.l #ObjRotated,a2
  2791.  move.w (a0),d0
  2792.  move.l PLR1_xoff,(a1,d0.w*8)
  2793.  move.l PLR1_zoff,4(a1,d0.w*8)
  2794.  move.l PLR1_Roompt,a1
  2795.  
  2796.  moveq #0,d2
  2797.  move.b damagetaken(a0),d2
  2798.  beq .notbeenshot
  2799.  move.l #7*2116,hitcol
  2800.  sub.w d2,PLR1_energy
  2801.  movem.l d0-d7/a0-a6,-(a7)
  2802.  move.b #$fb,IDNUM
  2803.  move.w #19,Samplenum
  2804.  clr.b notifplaying
  2805.  move.w #0,Noisex
  2806.  move.w #0,Noisez
  2807.  move.w #100,Noisevol
  2808.  jsr MakeSomeNoise
  2809.  
  2810.  movem.l (a7)+,d0-d7/a0-a6
  2811.  
  2812. .notbeenshot
  2813.  move.b #0,damagetaken(a0)
  2814.  move.b PLR1_energy+1,numlives(a0)
  2815.  
  2816.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2817.  
  2818.  move.w (a1),12(a0)
  2819.  move.w (a1),d2
  2820.  move.l #ZoneBrightTable,a1
  2821.  move.l (a1,d2.w*4),d2
  2822.  tst.b PLR1_StoodInTop
  2823.  bne.s .okinbott
  2824.  swap d2
  2825. .okinbott:
  2826.  
  2827.  move.w d2,2(a0)
  2828.  
  2829.  move.l p1_yoff,d0
  2830.  move.l p1_height,d1
  2831.  asr.l #1,d1
  2832.  add.l d1,d0
  2833.  asr.l #7,d0
  2834.  move.w d0,4(a0)
  2835.  
  2836. ***********************************
  2837.  
  2838.  move.l PLR2_Obj,a0 
  2839.  
  2840.  move.w PLR2_angpos,d0
  2841.  and.w #8190,d0
  2842.  move.w d0,Facing(a0)
  2843.  
  2844.  jsr ViewpointToDraw
  2845.  asl.w #2,d0
  2846.  moveq #0,d1
  2847.  move.b p2_bobble,d1
  2848.  not.b d1
  2849.  lsr.b #3,d1
  2850.  and.b #$3,d1
  2851.  add.w d1,d0
  2852.  move.w d0,10(a0)
  2853.  move.w #10,8(a0)
  2854.  
  2855.  move.l ObjectPoints,a1
  2856.  move.l #ObjRotated,a2
  2857.  move.w (a0),d0
  2858.  move.l PLR2_xoff,(a1,d0.w*8)
  2859.  move.l PLR2_zoff,4(a1,d0.w*8)
  2860.  move.l PLR2_Roompt,a1
  2861.  
  2862.  moveq #0,d2
  2863.  move.b damagetaken(a0),d2
  2864.  beq .notbeenshot2
  2865.  sub.w d2,PLR2_energy
  2866. .notbeenshot2
  2867.  move.b #0,damagetaken(a0)
  2868.  move.b PLR2_energy+1,numlives(a0)
  2869.  
  2870.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2871.  
  2872.  move.w (a1),12(a0)
  2873.  move.w (a1),d2
  2874.  move.l #ZoneBrightTable,a1
  2875.  move.l (a1,d2.w*4),d2
  2876.  tst.b PLR2_StoodInTop
  2877.  bne.s .okinbott2
  2878.  swap d2
  2879. .okinbott2:
  2880.  
  2881.  move.w d2,2(a0)
  2882.  
  2883.  move.l p2_yoff,d0
  2884.  move.l p2_height,d1
  2885.  asr.l #1,d1
  2886.  add.l d1,d0
  2887.  asr.l #7,d0
  2888.  move.w d0,4(a0)
  2889.  
  2890. **********************************
  2891.  
  2892.  
  2893.  move.l PLR1_Obj,a0
  2894.  move.w #-1,12+128(a0)
  2895.  
  2896.  rts
  2897.  
  2898. DRAWINGUN:
  2899.  move.l #Objects+9*16,a0
  2900.  move.l 4(a0),a5    ; ptr
  2901.  move.l 8(a0),a2    ; frames
  2902.  move.l 12(a0),a4    ; pal
  2903.  move.l (a0),a0        ; wad
  2904.  
  2905.  move.l #GunAnims,a1
  2906.  move.l (a1,d0.w*8),a1
  2907.  move.w (a1,d1.w*2),d5    ; frame of anim
  2908.  
  2909.  move.l #GUNYOFFS,a1
  2910.  move.w (a1,d0.w*2),d7    ; yoff
  2911.  move.l FASTBUFFER,a6
  2912.  move.w d7,d6
  2913.  muls #320*2*3,d6
  2914.  add.l d6,a6    ; screen pointer
  2915.  
  2916.  asl.w #2,d0
  2917.  add.w d5,d0    ; frame
  2918.  move.w (a2,d0.w*4),d1    ; xoff
  2919.  
  2920.  lea (a5,d1.w),a5    ; right ptr
  2921.  
  2922.  move.w #95,d0
  2923.  bsr DRAWCHUNK
  2924. ; addq.w #4,a6
  2925. ; move.w #31,d0
  2926. ; bsr DRAWCHUNK
  2927. ; addq.w #4,a6
  2928. ; move.w #31,d0
  2929. ; bsr DRAWCHUNK
  2930.  rts
  2931.  
  2932.  
  2933. DRAWCHUNK:
  2934.  move.w #78,d3
  2935.  sub.w d7,d3
  2936.  move.l a6,a3
  2937.  move.b (a5),d2
  2938.  move.l (a5)+,d1
  2939.  bne.s .noblank
  2940.  addq #6,a6
  2941.  dbra d0,DRAWCHUNK 
  2942.  rts
  2943.  
  2944. .noblank:
  2945.  and.l #$ffffff,d1
  2946.  lea (a0,d1.l),a1
  2947.  cmp.b #1,d2
  2948.  bgt.s thirdd
  2949.  beq.s secc
  2950. .drawdown:
  2951.  move.w (a1)+,d2
  2952.  and.w #%11111,d2
  2953.  beq.s .itsblank
  2954.  move.w (a4,d2.w*2),d4
  2955.  move.w d4,d5
  2956.  move.w d4,(a3)
  2957.  swap d4
  2958.  move.w d5,320*2(a3)
  2959.  move.w d5,d4
  2960.  move.l d4,320*2+2(a3)
  2961.  move.l d4,320*4(a3)
  2962.  move.w d4,320*4+4(a3)
  2963.  move.l d4,2(a3)
  2964. .itsblank
  2965.  add.w #320*2*3,a3
  2966.  dbra d3,.drawdown
  2967.  
  2968.  addq #6,a6
  2969.  dbra d0,DRAWCHUNK
  2970.  rts
  2971.  
  2972. secc:
  2973. .drawdown:
  2974.  move.w (a1)+,d2
  2975.  lsr.w #5,d2
  2976.  and.w #%11111,d2
  2977.  beq.s .itsblank
  2978.  move.w (a4,d2.w*2),d4
  2979.  move.w d4,d5
  2980.  move.w d4,(a3)
  2981.  swap d4
  2982.  move.w d5,320*2(a3)
  2983.  move.w d5,d4
  2984.  move.l d4,320*2+2(a3)
  2985.  move.l d4,320*4(a3)
  2986.  move.w d4,320*4+4(a3)
  2987.  move.l d4,2(a3)
  2988. .itsblank
  2989.  add.w #320*2*3,a3
  2990.  dbra d3,.drawdown
  2991.  
  2992.  addq #6,a6
  2993.  dbra d0,DRAWCHUNK
  2994.  rts
  2995.  
  2996. thirdd:
  2997. .drawdown:
  2998.  move.b (a1),d2
  2999.  addq #2,a1
  3000.  lsr.b #2,d2
  3001.  and.w #%11111,d2
  3002.  beq.s .itsblank
  3003.  move.w (a4,d2.w*2),d4
  3004.  move.w d4,d5
  3005.  move.w d4,(a3)
  3006.  swap d4
  3007.  move.w d5,320*2(a3)
  3008.  move.w d5,d4
  3009.  move.l d4,320*2+2(a3)
  3010.  move.l d4,320*4(a3)
  3011.  move.w d4,320*4+4(a3)
  3012.  move.l d4,2(a3)
  3013.  
  3014. .itsblank
  3015.  add.w #320*2*3,a3
  3016.  dbra d3,.drawdown
  3017.  
  3018.  addq #6,a6
  3019.  dbra d0,DRAWCHUNK
  3020.  rts
  3021.  
  3022.  
  3023.  
  3024. ***************************************************
  3025. **************************************************
  3026.  
  3027. USEPLR2:
  3028.  
  3029.  PROTKCHECK a0
  3030.  
  3031. ***********************************
  3032.  
  3033.  move.l PLR2_Obj,a0 
  3034.  move.l ObjectPoints,a1
  3035.  move.l #ObjRotated,a2
  3036.  move.w (a0),d0
  3037.  move.l PLR2_xoff,(a1,d0.w*8)
  3038.  move.l PLR2_zoff,4(a1,d0.w*8)
  3039.  move.l PLR2_Roompt,a1
  3040.  
  3041.  moveq #0,d2
  3042.  move.b damagetaken(a0),d2
  3043.  beq .notbeenshot
  3044.  move.l #7*2116,hitcol
  3045.  sub.w d2,PLR2_energy
  3046.  movem.l d0-d7/a0-a6,-(a7)
  3047.  move.w #19,Samplenum
  3048.  clr.b notifplaying
  3049.  move.b #$fb,IDNUM
  3050.  move.w #0,Noisex
  3051.  move.w #0,Noisez
  3052.  move.w #100,Noisevol
  3053.  jsr MakeSomeNoise
  3054.  
  3055.  movem.l (a7)+,d0-d7/a0-a6
  3056.  
  3057. .notbeenshot
  3058.  move.b #0,damagetaken(a0)
  3059.  move.b PLR2_energy+1,numlives(a0)
  3060.  
  3061.  move.b PLR2_StoodInTop,ObjInTop(a0)
  3062.  
  3063.  move.w (a1),12(a0)
  3064.  move.w (a1),d2
  3065.  move.l #ZoneBrightTable,a1
  3066.  move.l (a1,d2.w*4),d2
  3067.  tst.b PLR2_StoodInTop
  3068.  bne.s .okinbott
  3069.  swap d2
  3070. .okinbott:
  3071.  
  3072.  move.w d2,2(a0)
  3073.  
  3074.  move.l PLR2_yoff,d0
  3075.  move.l p2_height,d1
  3076.  asr.l #1,d1
  3077.  add.l d1,d0
  3078.  asr.l #7,d0
  3079.  move.w d0,4(a0)
  3080.  
  3081. ***********************************
  3082.  
  3083.  move.l PLR1_Obj,a0 
  3084.  
  3085.  move.w PLR1_angpos,d0
  3086.  and.w #8190,d0
  3087.  move.w d0,Facing(a0)
  3088.  
  3089.  jsr ViewpointToDraw
  3090.  asl.w #2,d0
  3091.  moveq #0,d1
  3092.  move.b p1_bobble,d1
  3093.  not.b d1
  3094.  lsr.b #3,d1
  3095.  and.b #$3,d1
  3096.  add.w d1,d0
  3097.  move.w d0,10(a0)
  3098.  move.w #10,8(a0)
  3099.  
  3100.  move.l ObjectPoints,a1
  3101.  move.l #ObjRotated,a2
  3102.  move.w (a0),d0
  3103.  move.l PLR1_xoff,(a1,d0.w*8)
  3104.  move.l PLR1_zoff,4(a1,d0.w*8)
  3105.  move.l PLR1_Roompt,a1
  3106.  
  3107.  moveq #0,d2
  3108.  move.b damagetaken(a0),d2
  3109.  beq .notbeenshot2
  3110.  sub.w d2,PLR1_energy
  3111. .notbeenshot2
  3112.  move.b #0,damagetaken(a0)
  3113.  move.b PLR1_energy+1,numlives(a0)
  3114.  
  3115.  move.b PLR1_StoodInTop,ObjInTop(a0)
  3116.  
  3117.  move.w (a1),12(a0)
  3118.  move.w (a1),d2
  3119.  move.l #ZoneBrightTable,a1
  3120.  move.l (a1,d2.w*4),d2
  3121.  tst.b PLR1_StoodInTop
  3122.  bne.s .okinbott2
  3123.  swap d2
  3124. .okinbott2:
  3125.  
  3126.  move.w d2,2(a0)
  3127.  
  3128.  move.l PLR1_yoff,d0
  3129.  move.l p1_height,d1
  3130.  asr.l #1,d1
  3131.  add.l d1,d0
  3132.  asr.l #7,d0
  3133.  move.w d0,4(a0)
  3134.  
  3135. **********************************
  3136.  
  3137.  move.l PLR2_Obj,a0
  3138.  move.w #-1,12+64(a0)
  3139.  
  3140.  rts
  3141.  
  3142.  
  3143. GunSelected: dc.b 0
  3144.  even
  3145.  
  3146. GunAnims:
  3147.  dc.l MachineAnim,3
  3148.  dc.l PlasmaAnim,5
  3149.  dc.l RocketAnim,5
  3150.  dc.l FlameThrowerAnim,5
  3151.  dc.l GrenadeAnim,12
  3152.  dc.l 0,0
  3153.  dc.l 0,0
  3154.  dc.l ShotGunAnim,12+19+11+20+1
  3155.  
  3156. MachineAnim:
  3157.  dc.w 0,1,2,3
  3158. PlasmaAnim:
  3159.  dc.w 0,1,2,3,3,3
  3160. RocketAnim:
  3161.  dc.w 0,1,2,3,3,3
  3162. FlameThrowerAnim:
  3163.  dc.w 0,1,2,3,3,3
  3164. GrenadeAnim:
  3165.  dc.w 0,1,1,1,1
  3166.  dc.w 2,2,2,2,3
  3167.  dc.w 3,3,3
  3168. ShotGunAnim:
  3169.  dc.w 0
  3170.  dcb.w 12,2
  3171.  dcb.w 19,1
  3172.  dcb.w 11,2
  3173.  dcb.w 20,0
  3174.  dc.w 3
  3175.  
  3176. GunData: dc.l 0
  3177.  
  3178. PLR1_GunData:
  3179. ; 0=Pistol 1=Big Gun
  3180. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  3181.  
  3182. ; VISIBLE/INSTANT (0/FF)
  3183. ; damage,gotgun(b)
  3184. ; Delay (w), Lifetime of bullet (w)
  3185. ; Click or hold down (0,1)
  3186. ; BulSpd: (w)
  3187.  
  3188. ;0
  3189.  dc.w 0
  3190. ;2
  3191.  dc.b 8,3
  3192. ;4
  3193.  dc.b 15
  3194. ;5
  3195.  dc.b -1
  3196. ;6
  3197.  dc.b 4,$ff
  3198. ;8
  3199.  dc.w 5,-1,1,0
  3200. ;16
  3201.  dc.w 0,0,0
  3202. ;22
  3203.  dc.w 1
  3204.  
  3205.  ds.w 4
  3206.  
  3207. ;PlasmaGun
  3208.  
  3209.  dc.w 0
  3210.  dc.b 8,1
  3211.  dc.b 20
  3212.  dc.b 0
  3213.  dc.b 16,0
  3214.  dc.w 10,-1,0,5
  3215.  dc.w 0,0,0
  3216.  dc.w 1
  3217.  
  3218.  ds.w 4
  3219.  
  3220. ;RocketLauncher
  3221.  
  3222.  dc.w 0
  3223.  dc.b 8,9
  3224.  dc.b 2
  3225.  dc.b 0
  3226.  dc.b 12,0
  3227.  dc.w 30,-1,0,5
  3228.  dc.w 0,0,0
  3229.  dc.w 1
  3230.  
  3231.  
  3232.  ds.w 4
  3233.  
  3234. ; FlameThrower
  3235.  
  3236.  dc.w 90*8
  3237.  dc.b 1,22
  3238.  dc.b 40
  3239.  dc.b 0
  3240.  dc.b 8,$0    
  3241.  dc.w 5,50,1,4
  3242.  dc.w 0,0,0
  3243.  dc.w 1
  3244.  
  3245.  ds.w 4
  3246.  
  3247. ;Grenade launcher
  3248.  
  3249.  
  3250.  dc.w 0
  3251.  dc.b 8,9
  3252.  dc.b 6
  3253.  dc.b 0
  3254.  dc.b 8,0
  3255.  dc.w 50,100,1,5
  3256.  dc.w 60,3
  3257.  dc.w -1000
  3258.  dc.w 1
  3259.  
  3260.  ds.w 4
  3261.  
  3262. ; WORMGUN
  3263.  
  3264.  dc.w 0
  3265.  dc.b 0,0
  3266.  dc.b 0
  3267.  dc.b 0,0
  3268.  dc.w 0,-1,0,5
  3269.  dc.w 0,0
  3270.  dc.w 0
  3271.  dc.w 1
  3272.  ds.w 4
  3273.  
  3274. ; ToughMarineGun
  3275.  
  3276.  dc.w 0
  3277.  dc.b 0,0
  3278.  dc.b 0
  3279.  dc.b 0,0
  3280.  dc.w 0,-1,0,5
  3281.  dc.w 0,0
  3282.  dc.w 0
  3283.  dc.w 1
  3284.  ds.w 4
  3285.  
  3286. ; Shotgun
  3287.  
  3288. ;0
  3289.  dc.w 0
  3290. ;2
  3291.  dc.b 8,21
  3292. ;4
  3293.  dc.b 15
  3294. ;5
  3295.  dc.b -1
  3296. ;6
  3297.  dc.b 4,0
  3298. ;8
  3299.  dc.w 50,-1,1,0
  3300. ;16
  3301.  dc.w 0,0,0
  3302. ;22
  3303.  dc.w 7
  3304.  
  3305.  ds.w 4
  3306.  
  3307. PLR2_GunData:
  3308. ; 0=Pistol 1=Big Gun
  3309. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  3310.  
  3311. ; VISIBLE/INSTANT (0/FF)
  3312. ; damage,gotgun(b)
  3313. ; Delay (w)
  3314.  
  3315. ;0
  3316.  dc.w 0
  3317. ;2
  3318.  dc.b 8,3
  3319. ;4
  3320.  dc.b 15
  3321. ;5
  3322.  dc.b -1
  3323. ;6
  3324.  dc.b 4,$ff
  3325. ;8
  3326.  dc.w 5,-1,1,0
  3327. ;16
  3328.  dc.w 0,0,0
  3329. ;22
  3330.  dc.w 1
  3331.  
  3332.  ds.w 4
  3333.  
  3334. ;PlasmaGun
  3335.  
  3336.  dc.w 0
  3337.  dc.b 8,1
  3338.  dc.b 20
  3339.  dc.b 0
  3340.  dc.b 16,0
  3341.  dc.w 10,-1,0,5
  3342.  dc.w 0,0,0
  3343.  dc.w 1
  3344.  
  3345.  ds.w 4
  3346.  
  3347. ;RocketLauncher
  3348.  
  3349.  dc.w 0
  3350.  dc.b 8,9
  3351.  dc.b 2
  3352.  dc.b 0
  3353.  dc.b 12,0
  3354.  dc.w 30,-1,0,5
  3355.  dc.w 0,0,0
  3356.  dc.w 1
  3357.  
  3358.  
  3359.  ds.w 4
  3360.  
  3361. ; FlameThrower
  3362.  
  3363.  dc.w 90*8
  3364.  dc.b 1,22
  3365.  dc.b 40
  3366.  dc.b 0
  3367.  dc.b 8,$0    
  3368.  dc.w 5,50,1,4
  3369.  dc.w 0,0,0
  3370.  dc.w 1
  3371.  
  3372.  ds.w 4
  3373.  
  3374. ;Grenade launcher
  3375.  
  3376.  
  3377.  dc.w 0
  3378.  dc.b 8,9
  3379.  dc.b 6
  3380.  dc.b 0
  3381.  dc.b 8,0
  3382.  dc.w 50,100,1,5
  3383.  dc.w 60,3
  3384.  dc.w -1000
  3385.  dc.w 1
  3386.  
  3387.  ds.w 4
  3388.  
  3389. ; WORMGUN
  3390.  
  3391.  dc.w 0
  3392.  dc.b 0,0
  3393.  dc.b 0
  3394.  dc.b 0,0
  3395.  dc.w 0,-1,0,5
  3396.  dc.w 0,0
  3397.  dc.w 0
  3398.  dc.w 1
  3399.  ds.w 4
  3400.  
  3401. ; ToughMarineGun
  3402.  
  3403.  dc.w 0
  3404.  dc.b 0,0
  3405.  dc.b 0
  3406.  dc.b 0,0
  3407.  dc.w 0,-1,0,5
  3408.  dc.w 0,0
  3409.  dc.w 0
  3410.  dc.w 1
  3411.  ds.w 4
  3412.  
  3413. ; Shotgun
  3414.  
  3415. ;0
  3416.  dc.w 0
  3417. ;2
  3418.  dc.b 8,21
  3419. ;4
  3420.  dc.b 15
  3421. ;5
  3422.  dc.b -1
  3423. ;6
  3424.  dc.b 4,0
  3425. ;8
  3426.  dc.w 50,-1,1,0
  3427. ;16
  3428.  dc.w 0,0,0
  3429. ;22
  3430.  dc.w 7
  3431.  
  3432.  ds.w 4
  3433.  
  3434.  
  3435.  
  3436. protA: dc.w 0
  3437.  
  3438. Path:
  3439. ; incbin "testpath"
  3440. endpath:
  3441. pathpt: dc.l Path
  3442.  
  3443.  
  3444. PLR1KEYS: dc.b 0
  3445. PLR1PATH: dc.b 0
  3446. PLR1MOUSE: dc.b -1
  3447. PLR1JOY: dc.b 0
  3448. PLR2KEYS: dc.b 0
  3449. PLR2PATH: dc.b 0
  3450. PLR2MOUSE: dc.b -1
  3451. PLR2JOY: dc.b 0
  3452.  
  3453.  even
  3454.  
  3455. PLR1_bobble: dc.w 0
  3456. PLR2_bobble: dc.w 0
  3457. xwobble: dc.l 0
  3458. xwobxoff: dc.w 0
  3459.  
  3460. xwobzoff: dc.w 0
  3461.  
  3462. PLR1_Control:
  3463.  
  3464. ; Take a snapshot of everything.
  3465.  
  3466.  move.l PLR1_xoff,d2
  3467.  move.l d2,PLR1_oldxoff
  3468.  move.l d2,oldx
  3469.  move.l PLR1_zoff,d3
  3470.  move.l d3,PLR1_oldzoff
  3471.  move.l d3,oldz
  3472.  move.l p1_xoff,d0
  3473.  move.l d0,PLR1_xoff
  3474.  move.l d0,newx
  3475.  move.l p1_zoff,d1
  3476.  move.l d1,newz
  3477.  move.l d1,PLR1_zoff
  3478.  
  3479.  move.l p1_height,PLR1_height
  3480.  
  3481.  sub.l d2,d0
  3482.  sub.l d3,d1
  3483.  move.l d0,xdiff
  3484.  move.l d1,zdiff
  3485.  move.w p1_angpos,d0
  3486.  move.w d0,PLR1_angpos
  3487.  
  3488.  move.l #SineTable,a1
  3489.  move.w (a1,d0.w),PLR1_sinval
  3490.  add.w #2048,d0
  3491.  and.w #8190,d0
  3492.  move.w (a1,d0.w),PLR1_cosval
  3493.  
  3494.  move.l p1_yoff,d0
  3495.  move.w p1_bobble,d1
  3496.  move.w (a1,d1.w),d1
  3497.  move.w d1,d3
  3498.  ble.s notnegative
  3499.  neg.w d1
  3500. notnegative:
  3501.  add.w #16384,d1
  3502.  asr.w #4,d1
  3503.  
  3504.  tst.b PLR1_Ducked
  3505.  bne.s .notdouble
  3506.  add.w d1,d1
  3507. .notdouble
  3508.  ext.l d1
  3509.  move.l PLR1_height,d4
  3510.  sub.l d1,d4
  3511.  add.l d1,d0
  3512.  
  3513.  cmp.b #'s',mors
  3514.  beq.s .otherwob
  3515.  asr.w #6,d3
  3516.  ext.l d3
  3517.  move.l d3,xwobble
  3518.  move.w PLR1_sinval,d1
  3519.  muls d3,d1
  3520.  move.w PLR1_cosval,d2
  3521.  muls d3,d2
  3522.  swap d1
  3523.  swap d2
  3524.  asr.w #7,d1
  3525.  move.w d1,xwobxoff
  3526.  asr.w #7,d2
  3527.  neg.w d2
  3528.  move.w d2,xwobzoff
  3529. .otherwob
  3530.  
  3531.  move.l d0,PLR1_yoff
  3532.  move.l d0,newy
  3533.  move.l d0,oldy
  3534.  
  3535.  move.l d4,thingheight
  3536.  move.l #40*256,StepUpVal
  3537.  tst.b PLR1_Ducked
  3538.  beq.s .okbigstep
  3539.  move.l #10*256,StepUpVal
  3540. .okbigstep:
  3541.  
  3542.  move.l #$1000000,StepDownVal
  3543.  
  3544.  move.l PLR1_Roompt,a0
  3545.  move.w ToTelZone(a0),d0
  3546.  blt .noteleport
  3547.  
  3548.  move.w ToTelX(a0),newx
  3549.  move.w ToTelZ(a0),newz
  3550.  move.w #-1,CollId
  3551.  move.l #%111111111111111111,CollideFlags
  3552.  bsr Collision
  3553.  tst.b hitwall
  3554.  beq.s .teleport
  3555.  
  3556.  move.w PLR1_xoff,newx
  3557.  move.w PLR1_zoff,newz
  3558.  bra .noteleport
  3559.  
  3560. .teleport:
  3561.  
  3562.  move.l PLR1_Roompt,a0
  3563.  move.w ToTelZone(a0),d0
  3564.  move.w ToTelX(a0),PLR1_xoff
  3565.  move.w ToTelZ(a0),PLR1_zoff
  3566.  move.l PLR1_yoff,d1
  3567.  sub.l ToZoneFloor(a0),d1
  3568.  move.l ZoneAdds,a0
  3569.  move.l (a0,d0.w*4),a0
  3570.  add.l LEVELDATA,a0
  3571.  move.l a0,PLR1_Roompt
  3572.  add.l ToZoneFloor(a0),d1
  3573.  move.l d1,PLR1s_yoff
  3574.  move.l d1,PLR1_yoff
  3575.  move.l d1,PLR1s_tyoff
  3576.  move.l PLR1_xoff,PLR1s_xoff
  3577.  move.l PLR1_zoff,PLR1s_zoff
  3578.  
  3579.  SAVEREGS
  3580.  move.w #0,Noisex
  3581.  move.w #0,Noisez
  3582.  move.w #26,Samplenum
  3583.  move.w #100,Noisevol
  3584.  move.b #$fa,IDNUM
  3585.  jsr MakeSomeNoise
  3586.  GETREGS
  3587.  
  3588.  bra .cantmove
  3589.  
  3590. .noteleport:
  3591.  
  3592.  move.l PLR1_Roompt,objroom
  3593.  move.w #%100000000,wallflags
  3594.  move.b PLR1_StoodInTop,StoodInTop
  3595.  
  3596.  move.l #%1011111110111000001,CollideFlags
  3597.  move.w #-1,CollId
  3598.  
  3599.  bsr Collision
  3600.  tst.b hitwall
  3601.  beq.s .nothitanything
  3602.  move.w oldx,PLR1_xoff
  3603.  move.w oldz,PLR1_zoff
  3604.  move.l PLR1_xoff,PLR1s_xoff
  3605.  move.l PLR1_zoff,PLR1s_zoff
  3606.  bra .cantmove
  3607. .nothitanything:
  3608.  
  3609.  move.w #40,extlen
  3610.  move.b #0,awayfromwall
  3611.  
  3612.  clr.b exitfirst
  3613.  clr.b wallbounce
  3614.  bsr MoveObject
  3615.  move.b StoodInTop,PLR1_StoodInTop
  3616.  move.l objroom,PLR1_Roompt
  3617.  move.w newx,PLR1_xoff
  3618.  move.w newz,PLR1_zoff
  3619.  move.l PLR1_xoff,PLR1s_xoff
  3620.  move.l PLR1_zoff,PLR1s_zoff
  3621.  
  3622. .cantmove:
  3623.  
  3624.  move.l PLR1_Roompt,a0
  3625.  
  3626.  move.l ToZoneFloor(a0),d0
  3627.  tst.b PLR1_StoodInTop
  3628.  beq.s notintop
  3629.  move.l ToUpperFloor(a0),d0
  3630. notintop:
  3631.  
  3632.  adda.w #ToZonePts,a0
  3633.  sub.l PLR1_height,d0
  3634.  move.l d0,PLR1s_tyoff
  3635.  move.w p1_angpos,tmpangpos
  3636.  
  3637. ; move.l (a0),a0        ; jump to viewpoint list
  3638.  * A0 is pointing at a pointer to list of points to rotate
  3639.  move.w (a0)+,d1
  3640.  ext.l d1
  3641.  add.l PLR1_Roompt,d1
  3642.  move.l d1,PLR1_PointsToRotatePtr
  3643.  tst.w (a0)+
  3644.  sne.s DRAWNGRAPHTOP
  3645.  beq.s nobackgraphics
  3646.  cmp.b #'s',mors
  3647.  beq.s nobackgraphics
  3648.  move.l a0,-(a7)
  3649.  jsr putinbackdrop 
  3650.  move.l (a7)+,a0
  3651. nobackgraphics:
  3652.  adda.w #10,a0
  3653.  move.l a0,PLR1_ListOfGraphRooms
  3654.  
  3655. *************************************************
  3656.  rts
  3657.  
  3658. DRAWNGRAPHTOP
  3659.  
  3660. tstzone: dc.l 0
  3661. CollId: dc.w 0
  3662.  
  3663. PLR2_Control:
  3664.  
  3665.  PROTLCHECK a0
  3666.  
  3667. ; Take a snapshot of everything.
  3668.  
  3669.  move.l PLR2_xoff,d2
  3670.  move.l d2,PLR2_oldxoff
  3671.  move.l d2,oldx
  3672.  move.l PLR2_zoff,d3
  3673.  move.l d3,PLR2_oldzoff
  3674.  move.l d3,oldz
  3675.  move.l p2_xoff,d0
  3676.  move.l d0,PLR2_xoff
  3677.  move.l d0,newx
  3678.  move.l p2_zoff,d1
  3679.  move.l d1,newz
  3680.  move.l d1,PLR2_zoff
  3681.  
  3682.  move.l p2_height,PLR2_height
  3683.  
  3684.  sub.l d2,d0
  3685.  sub.l d3,d1
  3686.  move.l d0,xdiff
  3687.  move.l d1,zdiff
  3688.  move.w p2_angpos,d0
  3689.  move.w d0,PLR2_angpos
  3690.  
  3691.  move.l #SineTable,a1
  3692.  move.w (a1,d0.w),PLR2_sinval
  3693.  add.w #2048,d0
  3694.  and.w #8190,d0
  3695.  move.w (a1,d0.w),PLR2_cosval
  3696.  
  3697.  move.l p2_yoff,d0
  3698.  move.w p2_bobble,d1
  3699.  move.w (a1,d1.w),d1
  3700.  move.w d1,d3
  3701.  ble.s .notnegative
  3702.  neg.w d1
  3703. .notnegative:
  3704.  add.w #16384,d1
  3705.  asr.w #4,d1
  3706.  add.w d1,d1
  3707.  ext.l d1
  3708.  move.l PLR2_height,d4
  3709.  sub.l d1,d4
  3710.  add.l d1,d0
  3711.  
  3712.  cmp.b #'s',mors
  3713.  bne.s .otherwob
  3714.  asr.w #6,d3
  3715.  ext.l d3
  3716.  move.l d3,xwobble
  3717.  move.w PLR2_sinval,d1
  3718.  muls d3,d1
  3719.  move.w PLR2_cosval,d2
  3720.  muls d3,d2
  3721.  swap d1
  3722.  swap d2
  3723.  asr.w #7,d1
  3724.  move.w d1,xwobxoff
  3725.  asr.w #7,d2
  3726.  neg.w d2
  3727.  move.w d2,xwobzoff
  3728. .otherwob
  3729.  
  3730.  move.l d0,PLR2_yoff
  3731.  move.l d0,newy
  3732.  move.l d0,oldy
  3733.  
  3734.  move.l d4,thingheight
  3735.  move.l #40*256,StepUpVal
  3736.  tst.b PLR2_Ducked
  3737.  beq.s .okbigstep
  3738.  move.l #10*256,StepUpVal
  3739. .okbigstep:
  3740.  
  3741.  move.l #$1000000,StepDownVal
  3742.  
  3743.  move.l PLR2_Roompt,a0
  3744.  move.w ToTelZone(a0),d0
  3745.  blt .noteleport
  3746.  
  3747.  move.w ToTelX(a0),newx
  3748.  move.w ToTelZ(a0),newz
  3749.  move.w #-1,CollId
  3750.  move.l #%111111111111111111,CollideFlags
  3751.  bsr Collision
  3752.  tst.b hitwall
  3753.  beq.s .teleport
  3754.  
  3755.  move.w PLR2_xoff,newx
  3756.  move.w PLR2_zoff,newz
  3757.  bra .noteleport
  3758.  
  3759. .teleport:
  3760.  
  3761.  move.l PLR2_Roompt,a0
  3762.  move.w ToTelZone(a0),d0
  3763.  move.w ToTelX(a0),PLR2_xoff
  3764.  move.w ToTelZ(a0),PLR2_zoff
  3765.  move.l PLR2_yoff,d1
  3766.  sub.l ToZoneFloor(a0),d1
  3767.  move.l ZoneAdds,a0
  3768.  move.l (a0,d0.w*4),a0
  3769.  add.l LEVELDATA,a0
  3770.  move.l a0,PLR2_Roompt
  3771.  add.l ToZoneFloor(a0),d1
  3772.  move.l d1,PLR2s_yoff
  3773.  move.l d1,PLR2_yoff
  3774.  move.l d1,PLR2s_tyoff
  3775.  move.l PLR2_xoff,PLR2s_xoff
  3776.  move.l PLR2_zoff,PLR2s_zoff
  3777.  
  3778.  SAVEREGS
  3779.  move.w #0,Noisex
  3780.  move.w #0,Noisez
  3781.  move.w #26,Samplenum
  3782.  move.w #100,Noisevol
  3783.  move.b #$fa,IDNUM
  3784.  jsr MakeSomeNoise
  3785.  GETREGS
  3786.  
  3787.  bra .cantmove
  3788.  
  3789. .noteleport:
  3790.  
  3791.  move.l PLR2_Roompt,objroom
  3792.  move.w #%100000000000,wallflags
  3793.  move.b PLR2_StoodInTop,StoodInTop
  3794.  
  3795.  move.l #%1011111010111100001,CollideFlags
  3796.  move.w #-1,CollId
  3797.  
  3798.  bsr Collision
  3799.  tst.b hitwall
  3800.  beq.s .nothitanything
  3801.  move.w oldx,PLR2_xoff
  3802.  move.w oldz,PLR2_zoff
  3803.  move.l PLR2_xoff,PLR2s_xoff
  3804.  move.l PLR2_zoff,PLR2s_zoff
  3805.  bra .cantmove
  3806. .nothitanything:
  3807.  
  3808.  move.w #40,extlen
  3809.  move.b #0,awayfromwall
  3810.  
  3811.  clr.b exitfirst
  3812.  clr.b wallbounce
  3813.  bsr MoveObject
  3814.  move.b StoodInTop,PLR2_StoodInTop
  3815.  move.l objroom,PLR2_Roompt
  3816.  move.w newx,PLR2_xoff
  3817.  move.w newz,PLR2_zoff
  3818.  move.l PLR2_xoff,PLR2s_xoff
  3819.  move.l PLR2_zoff,PLR2s_zoff
  3820.  
  3821. .cantmove
  3822.  
  3823.  move.l PLR2_Roompt,a0
  3824.  
  3825.  move.l ToZoneFloor(a0),d0
  3826.  tst.b PLR2_StoodInTop
  3827.  beq.s .notintop
  3828.  move.l ToUpperFloor(a0),d0
  3829. .notintop:
  3830.  
  3831.  adda.w #ToZonePts,a0
  3832.  sub.l PLR2_height,d0
  3833.  move.l d0,PLR2s_tyoff
  3834.  move.w p2_angpos,tmpangpos
  3835.  
  3836. ; move.l (a0),a0        ; jump to viewpoint list
  3837.  * A0 is pointing at a pointer to list of points to rotate
  3838.  move.w (a0)+,d1
  3839.  ext.l d1
  3840.  add.l PLR2_Roompt,d1
  3841.  move.l d1,PLR2_PointsToRotatePtr
  3842.  tst.w (a0)+
  3843.  beq.s .nobackgraphics
  3844.  cmp.b #'s',mors
  3845.  bne.s .nobackgraphics
  3846.  move.l a0,-(a7)
  3847.  jsr putinbackdrop 
  3848.  move.l (a7)+,a0
  3849. .nobackgraphics:
  3850.  adda.w #10,a0
  3851.  move.l a0,PLR2_ListOfGraphRooms
  3852.  
  3853. *****************************************************
  3854.  
  3855.  rts
  3856.  
  3857.  
  3858. KeyMap: ds.b 256
  3859.  
  3860. fillscrnwater:
  3861.  dc.w 0
  3862. DONTDOGUN:
  3863.  dc.w 0
  3864.  
  3865.  
  3866. DrawDisplay:
  3867.  
  3868.  
  3869.  clr.b fillscrnwater
  3870.  
  3871.  move.l #SineTable,a0
  3872.  move.w angpos,d0
  3873.  move.w (a0,d0.w),d6
  3874.  adda.w #2048,a0
  3875.  move.w (a0,d0.w),d7
  3876.  move.w d6,sinval
  3877.  move.w d7,cosval
  3878.  
  3879.  move.l #KeyMap,a5
  3880.  moveq #0,d5
  3881.  move.b look_behind_key,d5
  3882.  tst.b (a5,d5.w)
  3883.  sne DONTDOGUN
  3884.  beq.s .nolookback
  3885.  neg.w cosval
  3886.  neg.w sinval
  3887. .nolookback:
  3888.  
  3889.  
  3890.  move.l yoff,d0
  3891.  asr.l #8,d0
  3892.  move.w d0,d1
  3893.  add.w #256-32,d1
  3894.  and.w #255,d1
  3895.  move.w d1,wallyoff
  3896.  asl.w #2,d0
  3897.  move.w d0,flooryoff
  3898.  
  3899.  move.w xoff,d6
  3900.  move.w d6,d3
  3901.  asr.w #1,d3
  3902.  add.w d3,d6
  3903.  asr.w #1,d6
  3904.  move.w d6,xoff34
  3905.  
  3906.  move.w zoff,d6
  3907.  move.w d6,d3
  3908.  asr.w #1,d3
  3909.  add.w d3,d6
  3910.  asr.w #1,d6
  3911.  move.w d6,zoff34
  3912.  
  3913.  bsr RotateLevelPts
  3914.  bsr RotateObjectPts
  3915.  bsr CalcPLR1InLine
  3916.  
  3917.  
  3918.  cmp.b #'n',mors
  3919.  bne.s doplr2too
  3920.  move.l PLR2_Obj,a0
  3921.  move.w #-1,12(a0)
  3922.  move.w #-1,GraphicRoom(a0)
  3923.  bra noplr2either
  3924.  
  3925. doplr2too:
  3926.  bsr CalcPLR2InLine
  3927. noplr2either:
  3928.  
  3929.  move.l endoflist,a0
  3930. subroomloop:
  3931.  move.w -(a0),d7
  3932.  blt jumpoutofrooms
  3933.  
  3934. ; bsr setlrclip
  3935. ; move.w leftclip,d0
  3936. ; cmp.w rightclip,d0
  3937. ; bge subroomloop
  3938.  move.l a0,-(a7)
  3939.  
  3940.  move.l ZoneAdds,a0
  3941.  move.l (a0,d7.w*4),a0
  3942.  add.l LEVELDATA,a0
  3943.  move.l ToZoneRoof(a0),SplitHeight
  3944.  move.l a0,ROOMBACK
  3945.  
  3946.  move.l ZoneGraphAdds,a0
  3947.  move.l 4(a0,d7.w*8),a2
  3948.  move.l (a0,d7.w*8),a0
  3949.  
  3950.  add.l LEVELGRAPHICS,a0
  3951.  add.l LEVELGRAPHICS,a2
  3952.  move.l a2,ThisRoomToDraw+4
  3953.  move.l a0,ThisRoomToDraw
  3954.  
  3955.  move.l ListOfGraphRooms,a1
  3956.  
  3957.  
  3958.  
  3959. finditit:
  3960.  tst.w (a1)
  3961.  blt nomoretodoatall
  3962.  cmp.w (a1),d7
  3963.  beq outoffind
  3964.  adda.w #8,a1
  3965.  bra finditit
  3966.  
  3967. outoffind:
  3968.  
  3969.  move.l a1,-(a7)
  3970.  
  3971.  
  3972.  move.w #0,leftclip
  3973.  move.w #RIGHTX+1,rightclip
  3974.  moveq #0,d7
  3975.  move.w 2(a1),d7
  3976.  blt.s outofrcliplop
  3977.  move.l LEVELCLIPS,a0
  3978.  lea (a0,d7.l*2),a0
  3979.  
  3980.  tst.w (a0)
  3981.  blt outoflcliplop
  3982.  
  3983.  bsr NEWsetlclip
  3984.  
  3985. intolcliplop:        ; clips
  3986.  tst.w (a0)
  3987.  blt outoflcliplop
  3988.  
  3989.  bsr NEWsetlclip 
  3990.  bra intolcliplop
  3991.  
  3992. outoflcliplop:
  3993.  
  3994.  addq #2,a0
  3995.  
  3996.  tst.w (a0)
  3997.  blt outofrcliplop
  3998.  
  3999.  bsr NEWsetrclip
  4000.  
  4001. intorcliplop:        ; clips
  4002.  tst.w (a0)
  4003.  blt outofrcliplop
  4004.  
  4005.  bsr NEWsetrclip 
  4006.  bra intorcliplop
  4007.  
  4008. outofrcliplop:
  4009.  
  4010.  
  4011.  move.w leftclip,d0
  4012.  cmp.w #RIGHTX+1,d0
  4013.  bge dontbothercantseeit
  4014.  move.w rightclip,d1
  4015.  blt dontbothercantseeit
  4016.  cmp.w d1,d0
  4017.  bge dontbothercantseeit
  4018.  
  4019.  move.l yoff,d0
  4020.  cmp.l SplitHeight,d0
  4021.  blt botfirst
  4022.  
  4023.  move.l ThisRoomToDraw+4,a0
  4024.  cmp.l LEVELGRAPHICS,a0
  4025.  beq.s noupperroom
  4026.  st DOUPPER
  4027.  
  4028.  move.l ROOMBACK,a1
  4029.  move.l ToUpperRoof(a1),TOPOFROOM
  4030.  move.l ToUpperFloor(a1),BOTOFROOM
  4031.  
  4032.  move.l #CurrentPointBrights+2,PointBrightsPtr
  4033.  bsr dothisroom
  4034. noupperroom:
  4035.  move.l ThisRoomToDraw,a0
  4036.  clr.b DOUPPER
  4037.  move.l #CurrentPointBrights,PointBrightsPtr
  4038.  
  4039.  move.l ROOMBACK,a1
  4040.  move.l ToZoneRoof(a1),d0
  4041.  move.l d0,TOPOFROOM
  4042.  move.l ToZoneFloor(a1),d1
  4043.  move.l d1,BOTOFROOM
  4044.  
  4045.  move.l ToZoneWater(a1),d2
  4046.  cmp.l yoff,d2
  4047.  blt.s .abovefirst
  4048.  move.l d2,BEFOREWATTOP
  4049.  move.l d1,BEFOREWATBOT
  4050.  move.l d2,AFTERWATBOT
  4051.  move.l d0,AFTERWATTOP
  4052.  bra.s .belowfirst
  4053. .abovefirst:
  4054.  move.l d0,BEFOREWATTOP
  4055.  move.l d2,BEFOREWATBOT
  4056.  move.l d1,AFTERWATBOT
  4057.  move.l d2,AFTERWATTOP
  4058. .belowfirst:
  4059.  
  4060.  bsr dothisroom
  4061.  
  4062.  bra dontbothercantseeit
  4063. botfirst:
  4064.  
  4065.  move.l ThisRoomToDraw,a0
  4066.  clr.b DOUPPER
  4067.  move.l #CurrentPointBrights,PointBrightsPtr
  4068.  
  4069.  move.l ROOMBACK,a1
  4070.  move.l ToZoneRoof(a1),d0
  4071.  move.l d0,TOPOFROOM
  4072.  move.l ToZoneFloor(a1),d1
  4073.  move.l d1,BOTOFROOM
  4074.  
  4075.  move.l ToZoneWater(a1),d2
  4076.  cmp.l yoff,d2
  4077.  blt.s .abovefirst
  4078.  move.l d2,BEFOREWATTOP
  4079.  move.l d1,BEFOREWATBOT
  4080.  move.l d2,AFTERWATBOT
  4081.  move.l d0,AFTERWATTOP
  4082.  bra.s .belowfirst
  4083. .abovefirst:
  4084.  move.l d0,BEFOREWATTOP
  4085.  move.l d2,BEFOREWATBOT
  4086.  move.l d1,AFTERWATBOT
  4087.  move.l d2,AFTERWATTOP
  4088. .belowfirst:
  4089.  
  4090.  
  4091.  bsr dothisroom
  4092.  move.l ThisRoomToDraw+4,a0
  4093.  cmp.l LEVELGRAPHICS,a0
  4094.  beq.s noupperroom2
  4095.  move.l #CurrentPointBrights+2,PointBrightsPtr
  4096.  
  4097.  move.l ROOMBACK,a1
  4098.  move.l ToUpperRoof(a1),TOPOFROOM
  4099.  move.l ToUpperFloor(a1),BOTOFROOM
  4100.  
  4101.  st DOUPPER
  4102.  bsr dothisroom
  4103. noupperroom2:
  4104.  
  4105. dontbothercantseeit:
  4106. pastemp:
  4107.  
  4108.  move.l (a7)+,a1
  4109.  move.l ThisRoomToDraw,a0
  4110.  move.w (a0),d7
  4111.  
  4112.  adda.w #8,a1
  4113.  bra finditit
  4114.  
  4115. nomoretodoatall:
  4116.  
  4117.  move.l (a7)+,a0
  4118.  
  4119.  bra subroomloop
  4120.  
  4121. jumpoutofrooms:
  4122.  
  4123.  tst.b DONTDOGUN
  4124.  bne NOGUNLOOK
  4125.  
  4126.  cmp.b #'s',mors
  4127.  beq.s drawslavegun
  4128.  
  4129.  moveq #0,d0
  4130.  move.b PLR1_GunSelected,d0
  4131.  moveq #0,d1
  4132.  move.b PLR1_GunFrame,d1
  4133.  bsr DRAWINGUN
  4134.  bra drawngun
  4135.  
  4136. drawslavegun
  4137.  moveq #0,d0
  4138.  move.b PLR2_GunSelected,d0
  4139.  moveq #0,d1
  4140.  move.b PLR2_GunFrame,d1
  4141.  bsr DRAWINGUN
  4142.  
  4143. drawngun:
  4144.  
  4145. NOGUNLOOK:
  4146.  
  4147.  moveq #0,d1
  4148.  move.b PLR1_GunFrame,d1
  4149.  sub.w TempFrames,d1
  4150.  bgt.s .nn
  4151.  moveq #0,d1
  4152. .nn
  4153.  move.b d1,PLR1_GunFrame
  4154.  
  4155.  ble.s .donefire
  4156.  sub.b #1,PLR1_GunFrame
  4157. .donefire:
  4158.  
  4159.  moveq #0,d1
  4160.  move.b PLR2_GunFrame,d1
  4161.  sub.w TempFrames,d1
  4162.  bgt.s .nn2
  4163.  moveq #0,d1
  4164. .nn2
  4165.  move.b d2,PLR2_GunFrame
  4166.  
  4167.  ble.s .donefire2
  4168.  sub.b #1,PLR2_GunFrame
  4169. .donefire2:
  4170.  
  4171.  
  4172.  move.w #239,d0
  4173.  move.l FASTBUFFER,a0
  4174.  tst.b fillscrnwater
  4175.  beq nowaterfull
  4176.  bgt oknothalf
  4177.  moveq #119,d0
  4178.  add.l #320*120*2,a0
  4179. oknothalf:
  4180.  
  4181.  bclr.b #1,$bfe001
  4182.  
  4183.  move.l #brightentab+512*4,a2
  4184.  moveq #0,d2
  4185.  
  4186. fw:
  4187.  move.w #287,d1
  4188. fwa:
  4189.  move.b (a0),d2
  4190.  move.w (a2,d2.w*2),(a0)+
  4191.  dbra d1,fwa
  4192.  add.w #32*2,a0
  4193.  dbra d0,fw
  4194.  
  4195. ; move.l frompt,a0
  4196. ; add.l #104*4*60,a0
  4197. ; move.w #31,d0
  4198. ;fw:
  4199. ; move.w d5,d1
  4200. ; move.l a0,a1
  4201. ;fwd:
  4202. ;val SET 104*4*19
  4203. ; REPT 20
  4204. ; and.w #$ff,val(a1)
  4205. ;val SET val-104*4
  4206. ; ENDR
  4207. ; sub.l #104*4*20,a1
  4208. ; dbra d1,fwd
  4209. ; addq #4,a0
  4210. ; dbra d0,fw
  4211. ;
  4212. ; addq #4,a0
  4213. ;
  4214. ; move.w #31,d0
  4215. ;sw:
  4216. ; move.w d5,d1
  4217. ; move.l a0,a1
  4218. ;swd:
  4219. ;val SET 104*4*19
  4220. ; REPT 20
  4221. ; and.w #$ff,val(a1)
  4222. ;val SET val-104*4
  4223. ; ENDR
  4224. ; sub.l #104*4*20,a1
  4225. ; dbra d1,swd
  4226. ; addq #4,a0
  4227. ; dbra d0,sw
  4228. ;
  4229. ; addq #4,a0
  4230. ;
  4231. ; move.w #31,d0
  4232. ;tw:
  4233. ; move.w d5,d1
  4234. ; move.l a0,a1
  4235. ;twd:
  4236. ;val SET 104*4*19
  4237. ; REPT 20
  4238. ; and.w #$ff,val(a1)
  4239. ;val SET val-104*4
  4240. ; ENDR
  4241. ; sub.l #104*4*20,a1
  4242. ; dbra d1,twd
  4243. ; addq #4,a0
  4244. ; dbra d0,tw
  4245. ;
  4246.  rts
  4247.  
  4248. nowaterfull:
  4249.  bset.b #1,$bfe001
  4250.  rts
  4251.  
  4252. prot9: dc.w 0
  4253.  
  4254. TempBuffer: ds.l 100 
  4255.  
  4256. ClipTable: ds.l 30
  4257. EndOfClipPt: dc.l 0
  4258. DOUPPER: dc.w 0
  4259.  
  4260. RealTable:
  4261.  dc.l prot1-78935450
  4262.  dc.l prot2-78935450
  4263.  dc.l prot3-78935450
  4264.  dc.l prot4-78935450
  4265.  dc.l prot5-78935450
  4266.  dc.l prot6-78935450
  4267.  dc.l prot7-78935450
  4268.  dc.l prot8-78935450
  4269.  dc.l prot9-78935450
  4270.  dc.l protA-78935450
  4271.  
  4272. dothisroom
  4273.  
  4274.  move.w (a0)+,d0
  4275.  move.w d0,currzone
  4276.  move.l #ZoneBrightTable,a1
  4277.  move.l (a1,d0.w*4),d1
  4278.  tst.b DOUPPER
  4279.  bne.s .okbot
  4280.  swap d1
  4281. .okbot:
  4282.  move.w d1,ZoneBright
  4283.  
  4284. polyloop:
  4285.  move.w (a0)+,d0
  4286.  blt jumpoutofloop
  4287.  beq itsawall
  4288.  cmp.w #3,d0
  4289.  beq itsasetclip
  4290.  blt itsafloor
  4291.  cmp.w #4,d0
  4292.  beq itsanobject
  4293.  cmp.w #5,d0
  4294.  beq itsanarc
  4295.  cmp.w #6,d0
  4296.  beq itsalightbeam
  4297.  cmp.w #7,d0
  4298.  beq.s itswater
  4299.  cmp.w #9,d0
  4300.  ble itsachunkyfloor
  4301.  cmp.w #11,d0
  4302.  ble itsabumpyfloor
  4303.  cmp.w #12,d0
  4304.  beq.s itsbackdrop
  4305.  cmp.w #13,d0
  4306.  beq.s itsaseewall
  4307.  
  4308.  bra polyloop
  4309.  
  4310. itsaseewall:
  4311.  st seethru
  4312.  jsr itsawalldraw
  4313.  bra polyloop
  4314.  
  4315. itsbackdrop:
  4316.  jsr putinbackdrop
  4317.  bra polyloop
  4318.  
  4319. itswater:
  4320.  PROTHCHECK
  4321.  move.w #2,SMALLIT
  4322.  move.w #3,d0
  4323.  clr.b gourfloor
  4324.  move.l #FloorLine,LineToUse
  4325.  st usewater
  4326.  clr.b usebumps
  4327.  jsr itsafloordraw
  4328.  bra polyloop
  4329.  
  4330. itsanarc:
  4331.  jsr CurveDraw
  4332.  bra polyloop
  4333.  
  4334. itsanobject:
  4335.  jsr ObjDraw
  4336.  bra polyloop
  4337.  
  4338. itsalightbeam:
  4339.  jsr LightDraw
  4340.  bra polyloop
  4341.  
  4342. itsabumpyfloor:
  4343.  move.w #1,SMALLIT
  4344.  sub.w #9,d0
  4345.  st usebumps
  4346.  st smoothbumps
  4347.  clr.b usewater
  4348.  move.l #BumpLine,LineToUse
  4349.  jsr itsafloordraw
  4350.  bra polyloop
  4351.  
  4352. itsachunkyfloor:
  4353.  move.w #1,SMALLIT
  4354.  subq.w #7,d0
  4355.  st usebumps
  4356.  sub.w #12,topclip
  4357. ; add.w #10,botclip
  4358.  clr.b smoothbumps
  4359.  clr.b usewater
  4360.  move.l #BumpLine,LineToUse
  4361.  jsr itsafloordraw
  4362.  add.w #12,topclip
  4363. ; sub.w #10,botclip
  4364.  bra polyloop 
  4365.  
  4366. itsafloor:
  4367.  
  4368.  move.w #1,SMALLIT
  4369.  
  4370.  movem.l a0/d0,-(a7)
  4371.  move.l $4.w,a6
  4372.  jsr _LVOSuperState(a6)
  4373.  move.l d0,SSTACK
  4374.  movem.l (a7)+,a0/d0
  4375.  
  4376.  move.l THEFLOORLINE,LineToUse
  4377. * 1,2 = floor/roof
  4378.  clr.b usewater
  4379.  clr.b usebumps
  4380.  move.b GOURSEL,gourfloor    
  4381.  jsr itsafloordraw
  4382.  move.l a0,-(a7)
  4383.  move.l $4.w,a6
  4384.  move.l SSTACK,d0
  4385.  jsr _LVOUserState(a6)
  4386.  move.l (a7)+,a0
  4387.  bra polyloop
  4388. itsasetclip:
  4389.  bra polyloop
  4390. itsawall:
  4391.  clr.b seethru
  4392. ; move.l #stripbuffer,a1
  4393.  jsr itsawalldraw
  4394.  bra polyloop
  4395.  
  4396. jumpoutofloop:
  4397.  rts
  4398.  
  4399. SMALLIT: dc.w 0
  4400. GOURSEL: dc.w 0
  4401. ThisRoomToDraw: dc.l 0,0
  4402. SplitHeight: dc.l 0
  4403.  
  4404.  include "ab3:source_4000/OrderZones"
  4405.  
  4406. ReadMouse:
  4407.  move.l #$dff000,a6
  4408.  clr.l d0
  4409.  clr.l d1
  4410.  move.w $a(a6),d0
  4411.  lsr.w #8,d0
  4412.  ext.l d0
  4413.  move.w d0,d3
  4414.  move.w oldmy,d2
  4415.  sub.w d2,d0
  4416.  
  4417.  cmp.w #127,d0
  4418.  blt nonegy
  4419.  move.w #255,d1
  4420.  sub.w d0,d1
  4421.  move.w d1,d0
  4422.  neg.w d0
  4423. nonegy:
  4424.  
  4425.  cmp.w #-127,d0
  4426.  bge nonegy2
  4427.  move.w #255,d1
  4428.  add.w d0,d1
  4429.  move.w d1,d0
  4430. nonegy2:
  4431.  
  4432.  add.b d0,d2
  4433.  add.w d0,oldy2
  4434.  move.w d2,oldmy
  4435.  move.w d2,d0
  4436.  
  4437.  move.w oldy2,d0
  4438.  move.w d0,ymouse
  4439.  
  4440.  clr.l d0
  4441.  clr.l d1
  4442.  move.w $a(a6),d0
  4443.  ext.w d0
  4444.  ext.l d0
  4445.  move.w d0,d3
  4446.  move.w oldmx,d2
  4447.  sub.w d2,d0
  4448.  
  4449.  cmp.w #127,d0
  4450.  blt nonegx
  4451.  move.w #255,d1
  4452.  sub.w d0,d1
  4453.  move.w d1,d0
  4454.  neg.w d0
  4455. nonegx:
  4456.  
  4457.  cmp.w #-127,d0
  4458.  bge nonegx2
  4459.  move.w #255,d1
  4460.  add.w d0,d1
  4461.  move.w d1,d0
  4462. nonegx2:
  4463.  
  4464.  add.b d0,d2
  4465.  move.w d0,d1
  4466.  move.w d2,oldmx
  4467.  
  4468.  move.w #$0,$dff034
  4469.  
  4470.  add.w d0,oldx2
  4471.  move.w oldx2,d0
  4472.  and.w #2047,d0
  4473.  move.w d0,oldx2
  4474.  
  4475.  asl.w #2,d0
  4476.  sub.w prevx,d0
  4477.  add.w d0,prevx
  4478.  add.w d0,angpos
  4479.  move.w #0,lrs
  4480.  rts
  4481.  
  4482. noturn:
  4483.  
  4484. ; got to move lr instead. 
  4485.  
  4486. ; d1 = speed moved l/r
  4487.  
  4488.  move.w d1,lrs
  4489.  
  4490.  rts
  4491.  
  4492. lrs: dc.w 0
  4493. prevx: dc.w 0
  4494.  
  4495. angpos: dc.w 0
  4496. mang: dc.w 0
  4497. oldymouse: dc.w 0
  4498. xmouse: dc.w 0
  4499. ymouse: dc.w 0
  4500. oldx2: dc.w 0
  4501. oldmx: dc.w 0
  4502. oldmy: dc.w 0
  4503. oldy2: dc.w 0
  4504.  
  4505. RotateLevelPts:
  4506.  
  4507.  move.w sinval,d6
  4508.  swap d6
  4509.  move.w cosval,d6
  4510.  
  4511.  move.l PointsToRotatePtr,a0
  4512.  move.l Points,a3
  4513.  move.l #Rotated,a1
  4514.  move.l #OnScreen,a2
  4515.  move.w xoff,d4
  4516.  move.w zoff,d5
  4517.  
  4518. ; move.w #$c40,$dff106
  4519. ; move.w #$f00,$dff180
  4520.  
  4521. pointrotlop:
  4522.  move.w (a0)+,d7
  4523.  blt.s outofpointrot
  4524.  
  4525.  move.w (a3,d7*4),d0
  4526.  sub.w d4,d0
  4527.  move.w d0,d2
  4528.  move.w 2(a3,d7*4),d1
  4529.  sub.w d5,d1
  4530.  muls d6,d2
  4531.  swap d6
  4532.  move.w d1,d3
  4533.  muls d6,d3
  4534.  sub.l d3,d2
  4535.  add.l d2,d2
  4536.  swap d2
  4537.  ext.l d2
  4538.  asl.l #7,d2
  4539.  add.l xwobble,d2
  4540.  move.l d2,(a1,d7*8)
  4541.  
  4542.  muls d6,d0
  4543.  swap d6
  4544.  muls d6,d1
  4545.  add.l d0,d1
  4546.  asl.l #2,d1
  4547.  swap d1
  4548.  ext.l d1
  4549.  divs #3,d1
  4550.  move.l d1,4(a1,d7*8)
  4551.  
  4552.  tst.w d1
  4553.  bgt.s ptnotbehind
  4554.  tst.w d2
  4555.  bgt.s onrightsomewhere
  4556.  move.w #0,d2
  4557.  bra putin
  4558. onrightsomewhere:
  4559.  move.w #RIGHTX+1,d2
  4560.  bra putin
  4561. ptnotbehind:
  4562.  
  4563.  divs d1,d2
  4564.  add.w #MIDDLEX,d2
  4565. putin:
  4566.  move.w d2,(a2,d7*2)
  4567.  
  4568.  bra pointrotlop
  4569. outofpointrot:
  4570.  
  4571. ; move.w #$c40,$dff106
  4572. ; move.w #$ff0,$dff180
  4573.  
  4574.  rts
  4575.  
  4576. PLR1_ObjDists
  4577.  ds.w 250
  4578. PLR2_ObjDists
  4579.  ds.w 250
  4580.  
  4581. CalcPLR1InLine:
  4582.  
  4583.  move.w PLR1_sinval,d5
  4584.  move.w PLR1_cosval,d6
  4585.  move.l ObjectData,a4
  4586.  move.l ObjectPoints,a0
  4587.  move.w NumObjectPoints,d7
  4588.  move.l #PLR1_ObsInLine,a2
  4589.  move.l #PLR1_ObjDists,a3
  4590.  
  4591. .objpointrotlop:
  4592.  
  4593.  move.w (a0),d0
  4594.  sub.w PLR1_xoff,d0
  4595.  move.w 4(a0),d1
  4596.  addq #8,a0
  4597.  
  4598.  tst.w 12(a4)
  4599.  blt .noworkout
  4600.  
  4601.  moveq #0,d2
  4602.  move.b 16(a4),d2
  4603.  move.l #ColBoxTable,a6
  4604.  lea (a6,d2.w*8),a6
  4605.  
  4606.  sub.w PLR1_zoff,d1
  4607.  move.w d0,d2
  4608.  muls d6,d2
  4609.  move.w d1,d3
  4610.  muls d5,d3
  4611.  sub.l d3,d2
  4612.  add.l d2,d2
  4613.  
  4614.  bgt.s .okh
  4615.  neg.l d2
  4616. .okh:
  4617.  swap d2
  4618.  
  4619.  muls d5,d0
  4620.  muls d6,d1
  4621.  add.l d0,d1
  4622.  asl.l #2,d1
  4623.  swap d1
  4624.  moveq #0,d3
  4625.  
  4626.  tst.w d1
  4627.  ble.s .notinline
  4628.  asr.w #1,d2
  4629.  cmp.w (a6),d2
  4630.  bgt.s .notinline
  4631.  
  4632.  st d3
  4633. .notinline
  4634.  move.b d3,(a2)+
  4635.  
  4636.  move.w d1,(a3)+
  4637.  
  4638.  add.w #64,a4
  4639.  dbra d7,.objpointrotlop
  4640.  
  4641.  rts
  4642.  
  4643. .noworkout:
  4644.  move.b #0,(a2)+
  4645.  move.w #0,(a3)+
  4646.  add.w #64,a4
  4647.  dbra d7,.objpointrotlop
  4648.  rts
  4649.  
  4650.  
  4651. CalcPLR2InLine:
  4652.  
  4653.  move.w PLR2_sinval,d5
  4654.  move.w PLR2_cosval,d6
  4655.  move.l ObjectData,a4
  4656.  move.l ObjectPoints,a0
  4657.  move.w NumObjectPoints,d7
  4658.  move.l #PLR2_ObsInLine,a2
  4659.  move.l #PLR2_ObjDists,a3
  4660.  
  4661. .objpointrotlop:
  4662.  
  4663.  move.w (a0),d0
  4664.  sub.w PLR2_xoff,d0
  4665.  move.w 4(a0),d1
  4666.  addq #8,a0
  4667.  
  4668.  tst.w 12(a4)
  4669.  blt .noworkout
  4670.  
  4671.  moveq #0,d2
  4672.  move.b 16(a4),d2
  4673.  move.l #ColBoxTable,a6
  4674.  lea (a6,d2.w*8),a6
  4675.  
  4676.  sub.w PLR2_zoff,d1
  4677.  move.w d0,d2
  4678.  muls d6,d2
  4679.  move.w d1,d3
  4680.  muls d5,d3
  4681.  sub.l d3,d2
  4682.  add.l d2,d2
  4683.  
  4684.  bgt.s .okh
  4685.  neg.l d2
  4686. .okh:
  4687.  swap d2
  4688.  
  4689.  muls d5,d0
  4690.  muls d6,d1
  4691.  add.l d0,d1
  4692.  asl.l #2,d1
  4693.  swap d1
  4694.  moveq #0,d3
  4695.  
  4696.  tst.w d1
  4697.  ble.s .notinline
  4698.  asr.w #1,d2
  4699.  cmp.w (a6),d2
  4700.  bgt.s .notinline
  4701.  
  4702.  st d3
  4703. .notinline
  4704.  move.b d3,(a2)+
  4705.  
  4706.  move.w d1,(a3)+
  4707.  
  4708.  add.w #64,a4
  4709.  dbra d7,.objpointrotlop
  4710.  
  4711.  rts
  4712.  
  4713. .noworkout:
  4714.  move.w #0,(a3)+
  4715.  move.b #0,(a2)+
  4716.  add.w #64,a4
  4717.  dbra d7,.objpointrotlop
  4718.  rts
  4719.  
  4720.  
  4721. RotateObjectPts:
  4722.  
  4723.  move.w sinval,d5
  4724.  move.w cosval,d6
  4725.  
  4726.  move.l ObjectData,a4
  4727.  move.l ObjectPoints,a0
  4728.  move.w NumObjectPoints,d7
  4729.  move.l #ObjRotated,a1
  4730.  
  4731. .objpointrotlop:
  4732.  
  4733.  move.w (a0),d0
  4734.  sub.w xoff,d0
  4735.  move.w 4(a0),d1
  4736.  addq #8,a0
  4737.  
  4738.  tst.w 12(a4)
  4739.  blt .noworkout
  4740.  
  4741.  sub.w zoff,d1
  4742.  move.w d0,d2
  4743.  muls d6,d2
  4744.  move.w d1,d3
  4745.  muls d5,d3
  4746.  sub.l d3,d2
  4747.  
  4748.  
  4749.  add.l d2,d2
  4750.  swap d2
  4751.  move.w d2,(a1)+
  4752.  
  4753.  muls d5,d0
  4754.  muls d6,d1
  4755.  add.l d0,d1
  4756.  asl.l #2,d1
  4757.  swap d1
  4758.  ext.l d1
  4759.  divs #3,d1
  4760.  moveq #0,d3
  4761.  
  4762.  move.w d1,(a1)+
  4763.  ext.l d2
  4764.  asl.l #7,d2
  4765.  add.l xwobble,d2
  4766.  move.l d2,(a1)+
  4767.  sub.l xwobble,d2
  4768.  
  4769.  add.w #64,a4
  4770.  dbra d7,.objpointrotlop
  4771.  
  4772.  rts
  4773.  
  4774. .noworkout:
  4775.   move.l #0,(a1)+
  4776.   move.l #0,(a1)+
  4777.   add.w #64,a4
  4778.   dbra d7,.objpointrotlop
  4779.   rts
  4780.  
  4781. LightDraw:
  4782.  
  4783.  move.w (a0)+,d0
  4784.  move.w (a0)+,d1
  4785.  move.l #Rotated,a1
  4786.  move.w 6(a1,d0.w*8),d2
  4787.  ble.s oneendbehind
  4788.  move.w 6(a1,d1.w*8),d3
  4789.  bgt.s bothendsinfront
  4790.  
  4791. oneendbehind:
  4792.  rts
  4793. bothendsinfront:
  4794.  
  4795.  move.l #OnScreen,a2
  4796.  move.w (a2,d0.w*2),d0
  4797.  bge.s okleftend
  4798.  moveq #0,d0
  4799. okleftend:
  4800.  move.w (a2,d1.w*2),d1
  4801.  bgt.s somevis
  4802.  rts
  4803. somevis:
  4804.  cmp.w #RIGHTX,d0
  4805.  ble.s somevis2
  4806.  rts
  4807. somevis2:
  4808.  cmp.w #RIGHTX,d1
  4809.  ble.s okrightend
  4810.  move.w #RIGHTX,d1
  4811. okrightend:
  4812.  
  4813.  sub.w d0,d1
  4814.  blt.s wrongbloodywayround
  4815.  move.l #brightentab,a4
  4816.  move.l #objintocop,a1
  4817.  lea (a1,d0.w*2),a1
  4818.  
  4819.  move.l frompt,a3
  4820.  move.w #104*4,d6
  4821.  move.w #79,d2
  4822. lacross:
  4823.  move.w d2,d3
  4824.  move.l a3,a2
  4825.  adda.w (a1)+,a2
  4826. ldown:
  4827.  add.w d6,a2
  4828.  move.w (a2),d7
  4829.  move.w (a4,d7.w*2),(a2)
  4830.  dbra d3,ldown
  4831.  dbra d1,lacross
  4832.  
  4833. wrongbloodywayround:
  4834.  
  4835.  rts
  4836.  
  4837. FaceToPlace: dc.w 0
  4838.  
  4839. Cheese:
  4840.  dc.w 4,15
  4841.  
  4842. FacesList:
  4843.  dc.w 0,4*4
  4844.  dc.w 1,2*4
  4845.  dc.w 0,2*4
  4846.  dc.w 2,2*4
  4847.  dc.w 0,2*4
  4848.  dc.w 1,3*4
  4849.  dc.w 0,2*4
  4850.  dc.w 2,3*4
  4851.  dc.w 0,5*4
  4852.  dc.w 1,2*4
  4853.  dc.w 0,2*4
  4854.  dc.w 2,2*4
  4855.  dc.w 0,2*4
  4856.  dc.w 1,2*4
  4857.  dc.w 0,2*4
  4858.  dc.w 2,3*4
  4859.  dc.w 0,1*4
  4860.  dc.w 1,3*4
  4861.  dc.w 0,1*4
  4862.  dc.w 2,3*4
  4863.  dc.w 0,1*4
  4864.  
  4865. EndOfFacesList:
  4866.  
  4867. FacesPtr:
  4868.  dc.l FacesList
  4869. FacesCounter:
  4870.  dc.w 0
  4871. Expression:
  4872.  dc.w 0
  4873.  
  4874. PlaceFace:
  4875.  
  4876.  move.w FacesCounter,d0
  4877.  subq #1,d0
  4878.  bgt.s NoNewFace
  4879.  
  4880.  move.l FacesPtr,a0
  4881.  
  4882.  move.w 2(a0),d0
  4883.  move.w (a0),Expression
  4884.  addq #4,a0
  4885.  cmp.l #EndOfFacesList,a0
  4886.  blt.s NotFirstFace
  4887.  
  4888.  move.l #FacesList,a0
  4889.  
  4890. NotFirstFace
  4891.  move.l a0,FacesPtr
  4892.  
  4893. NoNewFace:
  4894.  
  4895.  move.w d0,FacesCounter
  4896.  
  4897.  Move.w FaceToPlace,d0
  4898.  muls #5,d0
  4899.  add.w Expression,d0
  4900.  move.l #FacePlace+10,a0
  4901.  move.l #Faces,a1
  4902.  muls #(4*32*5),d0
  4903.  adda.w d0,a1
  4904.  move.w #4,d0
  4905.  move.w #24,d1
  4906.  
  4907.  move.w #4,d3
  4908. bitplaneloop:
  4909.  move.w #31,d2
  4910. PlaceFaceToPlaceInFacePlaceLoop:
  4911.  move.l (a1),(a0)
  4912.  adda.w d0,a1
  4913.  adda.w d1,a0
  4914.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  4915.  dbra d3,bitplaneloop
  4916.  
  4917.  rts
  4918.  
  4919. Energy:
  4920.  dc.w 191
  4921. OldEnergy:
  4922.  dc.w 191
  4923. Ammo: dc.w 63
  4924. OldAmmo: dc.w 63
  4925.  
  4926. FullEnergy:
  4927.  move.w #127,Energy
  4928.  move.w #127,OldEnergy
  4929.  move.l #health,a0
  4930.  move.l #borders,a1
  4931.  add.l #25*8*2+6,a1
  4932.  lea 2592(a1),a2
  4933.  move.w #127,d0
  4934. PutInFull:
  4935.  move.b (a0)+,(a1)
  4936.  move.b (a0)+,8(a1)
  4937.  add.w #16,a1
  4938.  move.b (a0)+,(a2)
  4939.  move.b (a0)+,8(a2)
  4940.  add.w #16,a2
  4941.  dbra d0,PutInFull
  4942.  
  4943.  rts
  4944.  
  4945. EnergyBar:
  4946.  
  4947.  move.w Energy,d0
  4948.  bgt.s .noeneg
  4949.  move.w #0,d0
  4950. .noeneg:
  4951.  move.w d0,Energy
  4952.  
  4953.  cmp.w OldEnergy,d0
  4954.  bne.s gottochange
  4955.  
  4956. NoChange
  4957.  rts
  4958.  
  4959. gottochange:
  4960.   
  4961.  blt LessEnergy
  4962.  cmp.w #127,Energy
  4963.  blt.s NotMax
  4964.  move.w #127,Energy
  4965. NotMax:
  4966.  
  4967.  move.w Energy,d0
  4968.  move.w OldEnergy,d2
  4969.  sub.w d0,d2
  4970.  beq.s NoChange    
  4971.  neg.w d2
  4972.  
  4973.  move.w #127,d3
  4974.  sub.w d0,d3
  4975.  
  4976.  move.l #health,a0
  4977.  lea (a0,d3.w*4),a0
  4978.  move.l #borders+25*16+6,a1
  4979.  lsl.w #4,d3
  4980.  add.w d3,a1
  4981.  lea 2592(a1),a2
  4982.  
  4983. EnergyRise:
  4984.  move.b (a0)+,(a1)
  4985.  move.b (a0)+,8(a1)
  4986.  add.w #16,a1
  4987.  move.b (a0)+,(a2)
  4988.  move.b (a0)+,8(a2)
  4989.  add.w #16,a2
  4990.  subq #1,d2
  4991.  bgt.s EnergyRise
  4992.  
  4993.  move.w Energy,OldEnergy
  4994.  
  4995.  rts 
  4996.  
  4997. LessEnergy: 
  4998.  move.w OldEnergy,d2
  4999.  sub.w d0,d2
  5000.  
  5001.  move.w #127,d3
  5002.  sub.w OldEnergy,d3
  5003.  
  5004.  move.l #borders+25*16+6,a1
  5005.  asl.w #4,d3
  5006.  add.w d3,a1
  5007.  lea 2592(a1),a2
  5008.  
  5009. EnergyDrain:
  5010.  move.b #0,(a1)
  5011.  move.b #0,8(a1)
  5012.  move.b #0,(a2)
  5013.  move.b #0,8(a2)
  5014.  add.w #16,a1
  5015.  add.w #16,a2
  5016.  subq #1,d2
  5017.  bgt.s EnergyDrain
  5018.  
  5019.  move.w Energy,OldEnergy
  5020.  
  5021.  rts 
  5022.  
  5023. AmmoBar:
  5024.  
  5025.  move.w Ammo,d0
  5026.  cmp.w OldAmmo,d0
  5027.  bne.s .gottochange
  5028.  
  5029. .NoChange
  5030.  rts
  5031.  
  5032. .gottochange:
  5033.   
  5034.  blt LessAmmo
  5035.  cmp.w #63,Ammo
  5036.  blt.s .NotMax
  5037.  move.w #63,Ammo
  5038. .NotMax:
  5039.  
  5040.  move.w Ammo,d0
  5041.  move.w OldAmmo,d2
  5042.  sub.w d0,d2
  5043.  beq.s .NoChange
  5044.  neg.w d2
  5045.  
  5046.  move.w #63,d3
  5047.  sub.w d0,d3
  5048.  
  5049.  move.l #Ammunition,a0
  5050.  lea (a0,d3.w*8),a0
  5051.  move.l #borders+5184+25*16+1,a1
  5052.  lsl.w #5,d3
  5053.  add.w d3,a1
  5054.  lea 2592(a1),a2
  5055.  
  5056. AmmoRise:
  5057.  move.b (a0)+,(a1)
  5058.  move.b (a0)+,8(a1)
  5059.  add.w #16,a1
  5060.  move.b (a0)+,(a2)
  5061.  move.b (a0)+,8(a2)
  5062.  add.w #16,a2
  5063.  move.b (a0)+,(a1)
  5064.  move.b (a0)+,8(a1)
  5065.  add.w #16,a1
  5066.  move.b (a0)+,(a2)
  5067.  move.b (a0)+,8(a2)
  5068.  add.w #16,a2
  5069.  subq #1,d2
  5070.  bgt.s AmmoRise
  5071.  
  5072.  move.w Ammo,OldAmmo
  5073.  
  5074.  rts 
  5075.  
  5076.  
  5077. LessAmmo: 
  5078.  move.w OldAmmo,d2
  5079.  sub.w d0,d2
  5080.  
  5081.  move.w #63,d3
  5082.  sub.w OldAmmo,d3
  5083.  
  5084.  move.l #borders++5184+25*16+1,a1
  5085.  asl.w #5,d3
  5086.  add.w d3,a1
  5087.  lea 2592(a1),a2
  5088.  
  5089. AmmoDrain:
  5090.  move.b #0,(a1)
  5091.  move.b #0,8(a1)
  5092.  move.b #0,(a2)
  5093.  move.b #0,8(a2)
  5094.  add.w #16,a1
  5095.  add.w #16,a2
  5096.  move.b #0,(a1)
  5097.  move.b #0,8(a1)
  5098.  move.b #0,(a2)
  5099.  move.b #0,8(a2)
  5100.  add.w #16,a1
  5101.  add.w #16,a2
  5102.  subq #1,d2
  5103.  bgt.s AmmoDrain
  5104.  
  5105.  move.w Ammo,OldAmmo
  5106.  
  5107.  rts 
  5108.  
  5109. nulop:
  5110.  move.w #$0010,$dff000+intreq
  5111.  rte
  5112.  
  5113. doanything: dc.w 0
  5114.  
  5115. end:
  5116.      _break #0
  5117.     
  5118.  
  5119.  clr.b dosounds
  5120.  clr.b doanything
  5121.  
  5122.  move.w PLR1_energy,Energy
  5123.  cmp.b #'s',mors
  5124.  bne.s .notsl
  5125.  move.w PLR2_energy,Energy
  5126. .notsl:
  5127.  
  5128.  bsr EnergyBar
  5129.  
  5130.  move.l drawpt,d0
  5131.  move.l olddrawpt,drawpt
  5132.  move.l d0,olddrawpt
  5133.  move.l d0,$dff084
  5134.  
  5135.  
  5136.  cmp.b #'b',Prefsfile+3
  5137.  bne.s .noback
  5138.  jsr mt_end
  5139. .noback
  5140.  tst.w Energy
  5141.  bgt.s wevewon
  5142.  
  5143.  move.l #gameover,mt_data
  5144.  st UseAllChannels
  5145.  clr.b reachedend
  5146.  jsr mt_init
  5147. playgameover:
  5148.  move.l #$dff000,a6
  5149. waitfortop2:
  5150.  
  5151.     
  5152.  btst.b #0,intreqrl(a6)
  5153.  beq waitfortop2
  5154.  move.w #$1,intreq(a6)
  5155.  
  5156.     
  5157.  jsr mt_music
  5158.  
  5159.  
  5160.     
  5161.  tst.b reachedend
  5162.  beq.s playgameover
  5163.  
  5164.  bra wevelost
  5165.  
  5166.  
  5167. wevewon:
  5168.  
  5169.  cmp.b #'n',mors
  5170.  bne.s .nonextlev
  5171.  add.w #1,MAXLEVEL
  5172.  st FINISHEDLEVEL
  5173. .nonextlev:
  5174.  
  5175.  move.l #welldone,mt_data
  5176.  st UseAllChannels
  5177.  clr.b reachedend
  5178.  jsr mt_init
  5179. playwelldone:
  5180.  move.l #$dff000,a6
  5181. waitfortop3:
  5182.  btst.b #0,intreqrl(a6)
  5183.  beq waitfortop3
  5184.  move.w #$1,intreq(a6)
  5185.  
  5186.  jsr mt_music
  5187.  
  5188.  tst.b reachedend
  5189.  beq.s playwelldone
  5190.  
  5191. wevelost:
  5192.  
  5193.  PROTICHECK a0
  5194.  
  5195.  jmp closeeverything 
  5196.  
  5197. endnomusic
  5198.  clr.b doanything
  5199.  cmp.b #'b',Prefsfile+3
  5200.  bne.s .noback
  5201.  jsr mt_end
  5202. .noback
  5203. *******************************
  5204. ; cmp.b #'n',mors
  5205. ; bne.s .nonextlev
  5206. ; cmp.w #15,MAXLEVEL
  5207. ; bge.s .nonextlev
  5208. ; add.w #1,MAXLEVEL
  5209. ; st FINISHEDLEVEL
  5210. ;.nonextlev:
  5211. ******************************
  5212.  
  5213.  jmp closeeverything
  5214.  
  5215. do32:
  5216.  move.w #31,d7
  5217.  move.w #$180,d1
  5218. across:
  5219.  move.w d1,(a1)+
  5220.  move.w d1,(a3)+
  5221.  move.w #0,(a1)+ 
  5222.  move.w #0,(a3)+
  5223.  add.w #2,d1
  5224.  dbra d7,across
  5225.  rts
  5226.  
  5227. string:
  5228.     dc.b    'credits',0
  5229.  
  5230. ENDGAMESCROLL:
  5231.  
  5232.     move.l    4.w,a6
  5233.     move.l    #string,d1
  5234.     moveq    #0,d2
  5235.     moveq    #0,d3
  5236.     jsr    _LVOExecute(a6)
  5237.  
  5238. ; include "endscroll.s"
  5239.  
  5240. ***********************************
  5241.  include "ab3:source_4000/CD32JOY"
  5242.  
  5243.  
  5244.  
  5245. *************************************
  5246. * Set left and right clip values
  5247. *************************************
  5248.  
  5249.  
  5250.  
  5251. NEWsetlclip:
  5252.  move.l #OnScreen,a1
  5253.  move.l #Rotated,a2
  5254.  move.l CONNECT_TABLE,a3
  5255.  
  5256.  move.w (a0),d0
  5257.  bge.s .notignoreleft
  5258.  
  5259. ; move.l #0,(a6)
  5260.  
  5261.  bra .leftnotoktoclip
  5262. .notignoreleft:
  5263.  
  5264.  move.w 6(a2,d0*8),d3    ; left z val
  5265.  bgt.s .leftclipinfront
  5266.  addq #2,a0
  5267.  rts
  5268.  
  5269.  tst.w 6(a2,d0*8)
  5270.  bgt.s .leftnotoktoclip
  5271. .ignoreboth:
  5272. ; move.l #0,(a6)
  5273. ; move.l #96*65536,4(a6)
  5274.  move.w #0,leftclip
  5275.  move.w #RIGHTX+1,rightclip
  5276.  addq #8,a6
  5277.  addq #2,a0
  5278.  rts
  5279.  
  5280. .leftclipinfront:
  5281.  move.w (a1,d0*2),d1    ; left x on screen
  5282.  move.w (a0),d2
  5283.  move.w 2(a3,d2.w*4),d2
  5284.  move.w (a1,d2.w*2),d2
  5285.  cmp.w d1,d2
  5286.  bgt.s .leftnotoktoclip
  5287.  
  5288. ; move.w d1,(a6)
  5289. ; move.w d3,2(a6)
  5290.  cmp.w leftclip,d1
  5291.  ble.s .leftnotoktoclip
  5292.  move.w d1,leftclip
  5293. .leftnotoktoclip:
  5294.  
  5295.  addq #2,a0
  5296.  
  5297.  rts
  5298.  
  5299. NEWsetrclip
  5300.  move.l #OnScreen,a1
  5301.  move.l #Rotated,a2
  5302.  move.l CONNECT_TABLE,a3
  5303.  move.w (a0),d0
  5304.  bge.s .notignoreright
  5305. ; move.w #96,4(a6)
  5306. ; move.w #0,6(a6)
  5307.  move.w #0,d4
  5308.  bra .rightnotoktoclip
  5309. .notignoreright:
  5310.  move.w 6(a2,d0*8),d4    ; right z val
  5311.  bgt.s .rightclipinfront
  5312. ; move.w #96,4(a6)
  5313. ; move.w #0,6(a6)
  5314.  bra.s .rightnotoktoclip
  5315.  
  5316. .rightclipinfront:
  5317.  move.w (a1,d0*2),d1    ; right x on screen
  5318.  move.w (a0),d2
  5319.  move.w (a3,d2.w*4),d2
  5320.  move.w (a1,d2.w*2),d2
  5321.  cmp.w d1,d2
  5322.  blt.s .rightnotoktoclip
  5323. ; move.w d1,4(a6)
  5324. ; move.w d4,6(a6)
  5325.  
  5326.  cmp.w rightclip,d1
  5327.  bge.s .rightnotoktoclip
  5328.  addq #1,d1
  5329.  move.w d1,rightclip
  5330. .rightnotoktoclip:
  5331.  addq #8,a6
  5332.  addq #2,a0
  5333.  rts
  5334.  
  5335. FIRSTsetlrclip:
  5336.  move.l #OnScreen,a1
  5337.  move.l #Rotated,a2
  5338.  
  5339.  move.w (a0)+,d0
  5340.  bge.s .notignoreleft
  5341.  bra .leftnotoktoclip
  5342. .notignoreleft:
  5343.  
  5344.  move.w 6(a2,d0*8),d3    ; left z val
  5345.  bgt.s .leftclipinfront
  5346.  
  5347.  move.w (a0),d0
  5348.  blt.s .ignoreboth
  5349.  tst.w 6(a2,d0*8)
  5350.  bgt.s .leftnotoktoclip
  5351. .ignoreboth
  5352.  move.w #RIGHTX+1,rightclip
  5353.  move.w #0,leftclip
  5354.  addq #2,a0
  5355.  rts
  5356.  
  5357. .leftclipinfront:
  5358.  move.w (a1,d0*2),d1    ; left x on screen
  5359.  cmp.w leftclip,d1
  5360.  ble.s .leftnotoktoclip
  5361.  move.w d1,leftclip
  5362. .leftnotoktoclip:
  5363.  
  5364.  move.w (a0)+,d0
  5365.  bge.s .notignoreright
  5366.  move.w #0,d4
  5367.  bra .rightnotoktoclip
  5368. .notignoreright:
  5369.  move.w 6(a2,d0*8),d4    ; right z val
  5370.  ble.s .rightnotoktoclip
  5371.  
  5372. .rightclipinfront:
  5373.  move.w (a1,d0*2),d1    ; right x on screen
  5374.  addq #1,d1
  5375.  cmp.w rightclip,d1
  5376.  bge.s .rightnotoktoclip
  5377.  move.w d1,rightclip
  5378. .rightnotoktoclip:
  5379.  
  5380. ; move.w leftclip,d0
  5381. ; move.w rightclip,d1
  5382. ; cmp.w d0,d1
  5383. ; bge.s .noswap
  5384. ; move.w #192,rightclip
  5385. ; move.w #0,leftclip
  5386. ;.noswap:
  5387.  
  5388.  rts
  5389.  
  5390.  
  5391. leftclip2: dc.w 0
  5392. rightclip2: dc.w 0
  5393. ZoneBright: dc.w 0
  5394.  
  5395. npolys: dc.w 0
  5396.  
  5397. PLR1_fire: dc.b 0
  5398. PLR2_fire: dc.b 0
  5399.  
  5400. *****************************************************
  5401.  
  5402.  
  5403. pastdata:
  5404. ***********************************
  5405. * This routine animates brightnesses.
  5406.  
  5407.  
  5408. liftpt: dc.l liftanimtab
  5409.  
  5410. brightpt:
  5411.  dc.l brightanimtab
  5412.  
  5413.  
  5414. liftanim:
  5415.  rts
  5416.  
  5417. ******************************
  5418.  include "ab3:source_4000/ObjectMove"
  5419.  include "ab3:source_4000/Anims"
  5420.  include "ab3:source_4000/airoutine.s"
  5421. ******************************
  5422. startpass:
  5423. ; include "ab3:source_4000/password_reloc.s"
  5424. endpass:
  5425.  
  5426. rotanimpt: dc.w 0
  5427. xradd: dc.w 5
  5428. yradd: dc.w 8
  5429. xrpos: dc.w 320
  5430. yrpos: dc.w 320
  5431.  
  5432. rotanim:
  5433.  rts
  5434.  
  5435. option:
  5436.  dc.l 0,0
  5437.  
  5438. ********** WALL STUFF *******************************
  5439.  
  5440.  include "AB3:source_4000/fullscrnwall.s"
  5441.  
  5442. *****************************************************
  5443.  
  5444. ******************************************
  5445. * floor polygon
  5446.  
  5447. numsidestd: dc.w 0
  5448. bottomline: dc.w 0
  5449.  
  5450. checkforwater:
  5451.  tst.b usewater
  5452.  beq.s .notwater
  5453.  
  5454.  move.l Roompt,a1
  5455.  move.w (a1),d7
  5456.  cmp.w currzone,d7
  5457.  bne.s .notwater
  5458.  
  5459.  move.b #$f,fillscrnwater
  5460.  
  5461. .notwater:
  5462.  move.w (a0)+,d6    ; sides-1
  5463.  add.w d6,d6
  5464.  add.w d6,a0
  5465.  add.w #4+6,a0
  5466.  rts
  5467.  
  5468.  rts
  5469.  
  5470. NewCornerBuff:
  5471.  ds.l 100
  5472. CLRNOFLOOR: dc.w 0
  5473.  
  5474. itsafloordraw:
  5475.  
  5476. * If D0 =1 then its a floor otherwise (=2) it's
  5477. * a roof.
  5478.  
  5479.  move.w #0,above
  5480.  move.w (a0)+,d6    ; ypos of poly
  5481.  
  5482.  move.w d6,d7
  5483.  ext.l d7
  5484.  asl.l #6,d7
  5485.  cmp.l TOPOFROOM,d7
  5486.  blt checkforwater
  5487.  cmp.l BOTOFROOM,d7
  5488.  bgt.s dontdrawreturn
  5489.  
  5490.  move.w leftclip(pc),d7
  5491.  cmp.w rightclip(pc),d7
  5492.  bge.s dontdrawreturn
  5493.  
  5494.  move.w botclip,d7
  5495.  sub.w MIDDLEY,d7
  5496.  ble.s dontdrawreturn
  5497.  sub.w flooryoff,d6
  5498.  bgt.s below
  5499.  blt.s aboveplayer
  5500.  
  5501.  tst.b usewater
  5502.  beq.s .notwater
  5503.  
  5504.  move.l Roompt,a1
  5505.  move.w (a1),d7
  5506.  cmp.w currzone,d7
  5507.  
  5508.  bne.s .notwater
  5509.  
  5510.  st fillscrnwater
  5511.  
  5512. .notwater:
  5513.  
  5514.  
  5515. dontdrawreturn:
  5516.  move.w (a0)+,d6    ; sides-1
  5517.  add.w d6,d6
  5518.  add.w d6,a0
  5519.  add.w #4+6,a0
  5520.  rts
  5521. aboveplayer:
  5522.  
  5523.  tst.b usewater
  5524.  beq.s .notwater
  5525.  
  5526.  move.l Roompt,a1
  5527.  move.w (a1),d7
  5528.  cmp.w currzone,d7
  5529.  bne.s .notwater
  5530.  
  5531.  move.b #$f,fillscrnwater
  5532.  
  5533. .notwater:
  5534.  
  5535.  btst #1,d0
  5536.  beq.s dontdrawreturn
  5537.  move.w MIDDLEY,d7
  5538.  sub.w topclip,d7 
  5539.  ble.s dontdrawreturn
  5540.  move.w #1,d0
  5541.  move.w d0,above
  5542.  neg.w d6
  5543. below:
  5544.  btst #0,d0
  5545.  beq.s dontdrawreturn
  5546.  move.w d6,distaddr
  5547.  muls #64,d6
  5548.  move.l d6,ypos
  5549.  divs d7,d6        ; zpos of bottom
  5550.             ; visible line
  5551.  move.w d6,minz
  5552.  move.w d7,bottomline
  5553.  
  5554. ; Go round each point finding out
  5555. ; if it should be visible or not.
  5556.  
  5557.  move.l a0,-(a7)
  5558.  
  5559.  move.w (a0)+,d7    ; number of sides
  5560.  move.l #Rotated,a1
  5561.  move.l #OnScreen,a2
  5562.  move.l #NewCornerBuff,a3
  5563.  moveq #0,d4
  5564.  moveq #0,d5
  5565.  moveq #0,d6
  5566.  clr.b anyclipping
  5567.  
  5568. cornerprocessloop:
  5569.  
  5570.  move.w (a0)+,d0
  5571.  move.w 6(a1,d0.w*8),d1
  5572.  ble  .canttell
  5573.  
  5574.  move.w (a2,d0.w*2),d3
  5575.  cmp.w leftclip,d3
  5576.  bgt.s .nol
  5577.  st d4
  5578.  st anyclipping
  5579.  bra.s .nos
  5580. .nol:
  5581.  cmp.w rightclip,d3
  5582.  blt.s .nor
  5583.  st d6
  5584.  st anyclipping
  5585.  bra.s .nos
  5586. .nor:
  5587.  st d5
  5588. .nos:
  5589.  bra .cantell
  5590.  
  5591. .canttell:
  5592.  st d5
  5593.  st anyclipping
  5594.  
  5595. .cantell:
  5596.  
  5597.  
  5598.  dbra d7,cornerprocessloop
  5599.  
  5600.  move.l (a7)+,a0
  5601.  tst.b d5
  5602.  bne.s somefloortodraw
  5603.  eor.b d4,d6
  5604.  bne dontdrawreturn
  5605.  
  5606. somefloortodraw:
  5607.  
  5608.  tst.b gourfloor
  5609.  bne goursides
  5610.  
  5611.  move.w #300,top
  5612.  move.w #-1,bottom
  5613.  move.w #0,drawit
  5614.  move.l #Rotated,a1
  5615.  move.l #OnScreen,a2
  5616.  move.w (a0)+,d7    ; no of sides
  5617. sideloop:
  5618.  move.w minz,d6
  5619.  move.w (a0)+,d1
  5620.  move.w (a0),d3
  5621.  move.w 6(a1,d1*8),d4    ;first z
  5622.  cmp.w d6,d4
  5623.  bgt firstinfront
  5624.  move.w 6(a1,d3*8),d5    ; sec z
  5625.  cmp.w d6,d5
  5626.  ble bothbehind
  5627. ** line must be on left and partially behind.
  5628.  sub.w d5,d4
  5629.  move.l (a1,d1*8),d0
  5630.  sub.l (a1,d3*8),d0
  5631.  asr.l #7,d0
  5632.  sub.w d5,d6
  5633.  muls d6,d0    ; new x coord
  5634.  divs d4,d0
  5635.  ext.l d0
  5636.  asl.l #7,d0
  5637.  
  5638.  add.l (a1,d3*8),d0
  5639.  move.w minz,d4
  5640.  move.w (a2,d3*2),d2
  5641.  divs d4,d0
  5642.  add.w #MIDDLEX,d0
  5643.  move.l ypos,d3
  5644.  divs d5,d3
  5645.  move.w bottomline,d1 
  5646.  bra lineclipped
  5647.  
  5648. firstinfront:
  5649.  move.w 6(a1,d3*8),d5    ; sec z
  5650.  cmp.w d6,d5
  5651.  bgt bothinfront
  5652. ** line must be on right and partially behind.
  5653.  sub.w d4,d5    ; dz
  5654.  move.l (a1,d3*8),d2
  5655.  sub.l (a1,d1*8),d2    ; dx
  5656.  sub.w d4,d6
  5657.  asr.l #7,d2
  5658.  muls d6,d2    ; new x coord
  5659.  divs d5,d2
  5660.  ext.l d2
  5661.  asl.l #7,d2
  5662.  add.l (a1,d1*8),d2
  5663.  move.w minz,d5
  5664.  move.w (a2,d1*2),d0
  5665.  divs d5,d2
  5666.  add.w #MIDDLEX,d2
  5667.  move.l ypos,d1
  5668.  divs d4,d1
  5669.  move.w bottomline,d3 
  5670.  bra lineclipped
  5671.  
  5672. bothinfront:
  5673.  
  5674. * Also, usefully enough, both are on-screen
  5675. * so no bottom clipping is needed.
  5676.  
  5677.  move.w (a2,d1*2),d0    ; first x
  5678.  move.w (a2,d3*2),d2    ; second x
  5679.  move.l ypos,d1
  5680.  move.l d1,d3
  5681.  divs d4,d1        ; first y
  5682.  divs d5,d3        ; second y
  5683. lineclipped:
  5684.  move.l #rightsidetab,a3
  5685.  cmp.w d1,d3
  5686.  beq lineflat
  5687.  st drawit
  5688.  bgt lineonright
  5689.  move.l #leftsidetab,a3
  5690.  exg d1,d3
  5691.  exg d0,d2
  5692.  
  5693.  lea (a3,d1*2),a3
  5694.  
  5695.  cmp.w top(pc),d1
  5696.  bge.s .nonewtop
  5697.  move.w d1,top
  5698. .nonewtop:
  5699.  cmp.w bottom(pc),d3
  5700.  ble.s .nonewbot
  5701.  move.w d3,bottom
  5702. .nonewbot:
  5703.  
  5704.  sub.w d1,d3    ; dy
  5705.  sub.w d0,d2    ; dx
  5706.  
  5707.  blt .linegoingleft
  5708.  sub.w #1,d0
  5709.  
  5710.  ext.l d2
  5711.  divs d3,d2
  5712.  move.w d2,d6
  5713.  swap d2
  5714.  
  5715. ; moveq #0,d6
  5716. ; sub.w d3,d2
  5717. ; blt.s .noco
  5718. ;.makeco
  5719. ; addq #1,d6
  5720. ; sub.w d3,d2
  5721. ; bge.s .makeco
  5722. ;.noco
  5723. ; add.w d3,d2
  5724.  
  5725.  move.w d3,d4
  5726.  move.w d3,d5
  5727.  subq #1,d5
  5728.  move.w d6,d1
  5729.  addq #1,d1
  5730.  
  5731. .pixlopright:
  5732.  move.w d0,(a3)+
  5733.  sub.w d2,d4
  5734.  bge.s .nobigstep
  5735.  add.w d1,d0
  5736.  add.w d3,d4
  5737.  dbra d5,.pixlopright
  5738.  bra lineflat
  5739. .nobigstep
  5740.  add.w d6,d0
  5741.  dbra d5,.pixlopright
  5742.  bra lineflat
  5743.  
  5744. .linegoingleft:
  5745.  
  5746.  sub.w #1,d0
  5747.  
  5748.  neg.w d2
  5749.  
  5750.  ext.l d2
  5751.  divs d3,d2
  5752.  move.w d2,d6
  5753.  swap d2
  5754.  
  5755.  
  5756. ; moveq #0,d6
  5757. ; sub.w d3,d2
  5758. ; blt.s .nocol
  5759. ;.makecol
  5760. ; addq #1,d6
  5761. ; sub.w d3,d2
  5762. ; bge.s .makecol
  5763. ;.nocol
  5764. ; add.w d3,d2
  5765.  
  5766.  
  5767.  
  5768.  move.w d3,d4
  5769.  move.w d3,d5
  5770.  subq #1,d5
  5771.  
  5772.  move.w d6,d1
  5773.  addq #1,d1
  5774.  
  5775. .pixlopleft:
  5776.  sub.w d2,d4
  5777.  bge.s .nobigstepl
  5778.  sub.w d1,d0
  5779.  add.w d3,d4
  5780.  move.w d0,(a3)+
  5781.  dbra d5,.pixlopleft
  5782.  bra lineflat
  5783.  
  5784. .nobigstepl
  5785.  sub.w d6,d0
  5786.  move.w d0,(a3)+
  5787.  dbra d5,.pixlopleft
  5788.  bra lineflat
  5789.  
  5790. lineonright:
  5791.  
  5792.  lea (a3,d1*2),a3
  5793.  
  5794.  cmp.w top(pc),d1
  5795.  bge.s .nonewtop
  5796.  move.w d1,top
  5797. .nonewtop:
  5798.  cmp.w bottom(pc),d3
  5799.  ble.s .nonewbot
  5800.  move.w d3,bottom
  5801. .nonewbot:
  5802.  
  5803.  sub.w d1,d3    ; dy
  5804.  sub.w d0,d2    ; dx
  5805.  blt .linegoingleft
  5806. ; addq #1,d0
  5807.  ext.l d2
  5808.  divs d3,d2
  5809.  move.w d2,d6
  5810.  swap d2
  5811.  
  5812. ; moveq #0,d6
  5813. ; sub.w d3,d2
  5814. ; blt.s .noco
  5815. ;.makeco
  5816. ; addq #1,d6
  5817. ; sub.w d3,d2
  5818. ; bge.s .makeco
  5819. ;.noco
  5820. ; add.w d3,d2
  5821.  
  5822.  move.w d3,d4
  5823.  move.w d3,d5
  5824.  subq #1,d5
  5825.  move.w d6,d1
  5826.  addq #1,d1
  5827.  
  5828. .pixlopright:
  5829.  sub.w d2,d4
  5830.  bge.s .nobigstep
  5831.  add.w d1,d0
  5832.  add.w d3,d4
  5833.  move.w d0,(a3)+
  5834.  dbra d5,.pixlopright
  5835.  bra lineflat
  5836.  
  5837. .nobigstep
  5838.  add.w d6,d0
  5839.  move.w d0,(a3)+
  5840.  dbra d5,.pixlopright
  5841.  bra lineflat
  5842.  
  5843. .linegoingleft:
  5844. ; addq #1,d0
  5845.  neg.w d2
  5846.  
  5847.  ext.l d2
  5848.  divs d3,d2
  5849.  move.w d2,d6
  5850.  swap d2
  5851.  
  5852.  
  5853. ; moveq #0,d6
  5854. ; sub.w d3,d2
  5855. ; blt.s .nocol
  5856. ;.makecol
  5857. ; addq #1,d6
  5858. ; sub.w d3,d2
  5859. ; bge.s .makecol
  5860. ;.nocol
  5861. ; add.w d3,d2
  5862.  
  5863.  move.w d3,d4
  5864.  move.w d3,d5
  5865.  subq #1,d5
  5866.  move.w d6,d1
  5867.  addq #1,d1
  5868.  
  5869. .pixlopleft:
  5870.  move.w d0,(a3)+
  5871.  sub.w d2,d4
  5872.  bge.s .nobigstepl
  5873.  sub.w d1,d0
  5874.  add.w d3,d4
  5875.  dbra d5,.pixlopleft
  5876.  bra lineflat
  5877.  
  5878. .nobigstepl
  5879.  sub.w d6,d0
  5880.  dbra d5,.pixlopleft
  5881.  
  5882. lineflat:
  5883.  
  5884. bothbehind:
  5885.  dbra d7,sideloop
  5886.  bra pastsides
  5887.  
  5888. fbr: dc.w 0
  5889. sbr: dc.w 0
  5890.  
  5891. goursides:
  5892.  
  5893.  
  5894.  move.w #300,top
  5895.  move.w #-1,bottom
  5896.  move.w #0,drawit
  5897.  move.l #Rotated,a1
  5898.  move.l #OnScreen,a2
  5899.  move.w (a0)+,d7    ; no of sides
  5900. sideloopGOUR:
  5901.  move.w minz,d6
  5902.  move.w (a0)+,d1
  5903.  move.w (a0),d3
  5904.  
  5905.  move.l PointBrightsPtr,a4
  5906.  move.w (a4,d1.w*4),fbr
  5907.  move.w (a4,d3.w*4),sbr
  5908.  
  5909.  
  5910.  
  5911.  
  5912.  
  5913.  
  5914.  
  5915.  
  5916.  
  5917.  
  5918.  
  5919.  move.w 6(a1,d1*8),d4    ;first z
  5920.  cmp.w d6,d4
  5921.  bgt firstinfrontGOUR
  5922.  move.w 6(a1,d3*8),d5    ; sec z
  5923.  cmp.w d6,d5
  5924.  ble bothbehindGOUR
  5925. ** line must be on left and partially behind.
  5926.  sub.w d5,d4
  5927.  
  5928.  move.w fbr,d0
  5929.  sub.w sbr,d0
  5930.  sub.w d5,d6
  5931.  muls d6,d0
  5932.  divs d4,d0
  5933.  add.w sbr,d0
  5934.  move.w d0,fbr
  5935.  
  5936.  move.l (a1,d1*8),d0
  5937.  sub.l (a1,d3*8),d0
  5938.  asr.l #7,d0
  5939.  muls d6,d0    ; new x coord
  5940.  divs d4,d0
  5941.  ext.l d0
  5942.  asl.l #7,d0
  5943.  
  5944.  add.l (a1,d3*8),d0
  5945.  move.w minz,d4
  5946.  move.w (a2,d3*2),d2
  5947.  divs d4,d0
  5948.  add.w #MIDDLEX,d0
  5949.  move.l ypos,d3
  5950.  divs d5,d3
  5951.  
  5952.  move.w bottomline,d1 
  5953.  bra lineclippedGOUR
  5954.  
  5955. firstinfrontGOUR:
  5956.  move.w 6(a1,d3*8),d5    ; sec z
  5957.  cmp.w d6,d5
  5958.  bgt bothinfrontGOUR
  5959. ** line must be on right and partially behind.
  5960.  sub.w d4,d5    ; dz
  5961.  
  5962.  move.w sbr,d2
  5963.  sub.w fbr,d2
  5964.  sub.w d4,d6
  5965.  muls d6,d2
  5966.  divs d5,d2
  5967.  add.w fbr,d2
  5968.  move.w d2,sbr
  5969.  
  5970.  move.l (a1,d3*8),d2
  5971.  sub.l (a1,d1*8),d2    ; dx
  5972.  asr.l #7,d2
  5973.  muls d6,d2    ; new x coord
  5974.  divs d5,d2
  5975.  ext.l d2
  5976.  asl.l #7,d2
  5977.  add.l (a1,d1*8),d2
  5978.  move.w minz,d5
  5979.  move.w (a2,d1*2),d0
  5980.  divs d5,d2
  5981.  add.w #MIDDLEX,d2
  5982.  move.l ypos,d1
  5983.  divs d4,d1
  5984.  move.w bottomline,d3 
  5985.  bra lineclippedGOUR
  5986.  
  5987. bothinfrontGOUR:
  5988.  
  5989. * Also, usefully enough, both are on-screen
  5990. * so no bottom clipping is needed.
  5991.  
  5992.  move.w (a2,d1*2),d0    ; first x
  5993.  move.w (a2,d3*2),d2    ; second x
  5994.  move.l ypos,d1
  5995.  move.l d1,d3
  5996.  divs d4,d1        ; first y
  5997.  divs d5,d3        ; second y
  5998. lineclippedGOUR:
  5999.  move.l #rightsidetab,a3
  6000.  cmp.w d1,d3
  6001.  bne linenotflatGOUR
  6002.  
  6003. ; move.w fbr,d4
  6004. ; move.w sbr,d5
  6005. ; cmp.w d0,d2
  6006. ; bgt.s .nsw
  6007. ; exg d4,d5
  6008. ;.nsw:
  6009.  
  6010. ; move.l #leftbrighttab,a3
  6011. ; move.w d4,(a3,d3.w)
  6012. ; move.l #rightbrighttab,a3
  6013. ; move.w d5,(a3,d3.w) 
  6014.  bra lineflatGOUR
  6015.  
  6016. linenotflatGOUR
  6017.  st drawit
  6018.  bgt lineonrightGOUR
  6019.  move.l #leftsidetab,a3
  6020.  exg d1,d3
  6021.  exg d0,d2
  6022.  
  6023.  lea (a3,d1*2),a3
  6024.  lea leftbrighttab-leftsidetab(a3),a4
  6025.  
  6026.  cmp.w top(pc),d1
  6027.  bge.s .nonewtop
  6028.  move.w d1,top
  6029. .nonewtop:
  6030.  cmp.w bottom(pc),d3
  6031.  ble.s .nonewbot
  6032.  move.w d3,bottom
  6033. .nonewbot:
  6034.  
  6035.  sub.w d1,d3    ; dy
  6036.  sub.w d0,d2    ; dx
  6037.  
  6038.  blt .linegoingleft
  6039.  sub.w #1,d0
  6040.  ext.l d2
  6041.  divs d3,d2
  6042.  move.w d2,d6
  6043.  swap d2
  6044.  move.w d2,a5
  6045.  
  6046. ; moveq #0,d6
  6047. ; sub.w d3,d2
  6048. ; blt.s .noco
  6049. ;.makeco
  6050. ; addq #1,d6
  6051. ; sub.w d3,d2
  6052. ; bge.s .makeco
  6053. ;.noco
  6054. ; add.w d3,d2
  6055.  
  6056.  move.w d3,d4
  6057.  move.w d3,d5
  6058.  subq #1,d5
  6059.  move.w d6,d1
  6060.  addq #1,d1
  6061.  move.w d1,a6
  6062.  
  6063.  moveq #0,d1
  6064.  move.w sbr,d1
  6065.  move.w fbr,d2
  6066.  sub.w d1,d2
  6067.  ext.l d2
  6068.  asl.w #8,d2
  6069.  asl.w #2,d2
  6070.  divs d3,d2 
  6071.  ext.l d2
  6072.  asl.l #6,d2
  6073.  swap d1
  6074.  
  6075. .pixlopright:
  6076.  move.w d0,(a3)+
  6077.  swap d1
  6078.  move.w d1,(a4)+
  6079.  swap d1
  6080.  add.l d2,d1
  6081.  
  6082.  sub.w a5,d4
  6083.  bge.s .nobigstep
  6084.  add.w a6,d0
  6085.  add.w d3,d4
  6086.  dbra d5,.pixlopright
  6087.  bra lineflatGOUR
  6088. .nobigstep
  6089.  
  6090.  add.w d6,d0
  6091.  dbra d5,.pixlopright
  6092.  bra lineflatGOUR
  6093.  
  6094. .linegoingleft:
  6095.  sub.w #1,d0
  6096.  neg.w d2
  6097.  
  6098.  ext.l d2
  6099.  divs d3,d2
  6100.  move.w d2,d6
  6101.  swap d2
  6102.  
  6103.  
  6104. ; moveq #0,d6
  6105. ; sub.w d3,d2
  6106. ; blt.s .nocol
  6107. ;.makecol
  6108. ; addq #1,d6
  6109. ; sub.w d3,d2
  6110. ; bge.s .makecol
  6111. ;.nocol
  6112. ; add.w d3,d2
  6113.  
  6114.  move.w d3,d4
  6115.  move.w d3,d5
  6116.  subq #1,d5
  6117.  
  6118.  move.w d6,d1
  6119.  addq #1,d1
  6120.  move.w d1,a6
  6121.  move.w d2,a5
  6122.  
  6123.  moveq #0,d1
  6124.  move.w sbr,d1
  6125.  move.w fbr,d2
  6126.  sub.w d1,d2
  6127.  ext.l d2
  6128.  asl.w #8,d2
  6129.  asl.w #2,d2
  6130.  divs d3,d2 
  6131.  ext.l d2
  6132.  asl.l #6,d2
  6133.  swap d1
  6134.  
  6135. .pixlopleft:
  6136.  
  6137.  swap d1
  6138.  move.w d1,(a4)+
  6139.  swap d1
  6140.  add.l d2,d1
  6141.  
  6142.  sub.w a5,d4
  6143.  bge.s .nobigstepl
  6144.  sub.w a6,d0
  6145.  add.w d3,d4
  6146.  move.w d0,(a3)+
  6147.  dbra d5,.pixlopleft
  6148.  bra lineflatGOUR
  6149.  
  6150. .nobigstepl
  6151.  sub.w d6,d0
  6152.  move.w d0,(a3)+
  6153.  dbra d5,.pixlopleft
  6154.  bra lineflatGOUR
  6155.  
  6156. lineonrightGOUR:
  6157.  
  6158.  lea (a3,d1*2),a3
  6159.  
  6160.  lea rightbrighttab-rightsidetab(a3),a4
  6161.  
  6162.  cmp.w top(pc),d1
  6163.  bge.s .nonewtop
  6164.  move.w d1,top
  6165. .nonewtop:
  6166.  cmp.w bottom(pc),d3
  6167.  ble.s .nonewbot
  6168.  move.w d3,bottom
  6169. .nonewbot:
  6170.  
  6171.  sub.w d1,d3    ; dy
  6172.  sub.w d0,d2    ; dx
  6173.  blt .linegoingleft
  6174. ; addq #1,d0
  6175.  ext.l d2
  6176.  divs d3,d2
  6177.  move.w d2,d6
  6178.  swap d2
  6179.  
  6180. ; moveq #0,d6
  6181. ; sub.w d3,d2
  6182. ; blt.s .noco
  6183. ;.makeco
  6184. ; addq #1,d6
  6185. ; sub.w d3,d2
  6186. ; bge.s .makeco
  6187. ;.noco
  6188. ; add.w d3,d2
  6189.  
  6190.  move.w d3,d4
  6191.  move.w d3,d5
  6192.  subq #1,d5
  6193.  move.w d6,d1
  6194.  addq #1,d1
  6195.  
  6196.  move.w d1,a6
  6197.  move.w d2,a5
  6198.  
  6199.  moveq #0,d1
  6200.  move.w fbr,d1
  6201.  move.w sbr,d2
  6202.  sub.w d1,d2
  6203.  ext.l d2
  6204.  asl.w #8,d2
  6205.  asl.w #2,d2
  6206.  divs d3,d2 
  6207.  ext.l d2
  6208.  asl.l #6,d2
  6209.  swap d1
  6210.  
  6211. .pixlopright:
  6212.  
  6213.  swap d1
  6214.  move.w d1,(a4)+
  6215.  swap d1
  6216.  add.l d2,d1
  6217.  
  6218.  sub.w a5,d4
  6219.  bge.s .nobigstep
  6220.  add.w a6,d0
  6221.  add.w d3,d4
  6222.  move.w d0,(a3)+
  6223.  dbra d5,.pixlopright
  6224.  bra lineflatGOUR
  6225.  
  6226. .nobigstep
  6227.  add.w d6,d0
  6228.  move.w d0,(a3)+
  6229.  dbra d5,.pixlopright
  6230.  bra lineflatGOUR
  6231.  
  6232. .linegoingleft:
  6233. ; addq #1,d0
  6234.  neg.w d2
  6235.  
  6236.  ext.l d2
  6237.  divs d3,d2
  6238.  move.w d2,d6
  6239.  swap d2
  6240.  
  6241.  
  6242. ; moveq #0,d6
  6243. ; sub.w d3,d2
  6244. ; blt.s .nocol
  6245. ;.makecol
  6246. ; addq #1,d6
  6247. ; sub.w d3,d2
  6248. ; bge.s .makecol
  6249. ;.nocol
  6250. ; add.w d3,d2
  6251.  
  6252.  move.w d3,d4
  6253.  move.w d3,d5
  6254.  subq #1,d5
  6255.  move.w d6,d1
  6256.  addq #1,d1
  6257.  move.w d1,a6
  6258.  move.w d2,a5
  6259.  
  6260.  moveq #0,d1
  6261.  move.w fbr,d1
  6262.  move.w sbr,d2
  6263.  sub.w d1,d2
  6264.  ext.l d2
  6265.  asl.w #8,d2
  6266.  asl.w #2,d2
  6267.  divs d3,d2 
  6268.  ext.l d2
  6269.  asl.l #6,d2
  6270.  swap d1
  6271.  
  6272. .pixlopleft:
  6273.  
  6274.  swap d1
  6275.  move.w d1,(a4)+
  6276.  swap d1
  6277.  add.l d2,d1
  6278.  
  6279.  move.w d0,(a3)+
  6280.  sub.w a5,d4
  6281.  bge.s .nobigstepl
  6282.  sub.w a6,d0
  6283.  add.w d3,d4
  6284.  dbra d5,.pixlopleft
  6285.  bra lineflatGOUR
  6286.  
  6287. .nobigstepl
  6288.  sub.w d6,d0
  6289.  dbra d5,.pixlopleft
  6290.  
  6291. lineflatGOUR:
  6292.  
  6293. bothbehindGOUR:
  6294.  dbra d7,sideloopGOUR
  6295.  
  6296. pastsides:
  6297.  
  6298.  
  6299.  addq #2,a0
  6300.  
  6301.  move.w #320*2,linedir
  6302.  move.l FASTBUFFER,a6
  6303.  add.l BIGMIDDLEY,a6
  6304.  move.w (a0)+,d6
  6305.  add.w SMALLIT,d6
  6306.  move.w d6,scaleval
  6307.  move.w (a0)+,whichtile
  6308.  move.w (a0)+,d6
  6309.  add.w ZoneBright,d6
  6310.  move.w d6,lighttype
  6311.  move.w above(pc),d6
  6312.  beq groundfloor
  6313. * on ceiling:
  6314.  move.w #-320*2,linedir
  6315.  suba.w #320*2,a6
  6316. groundfloor:
  6317.  
  6318.  move.w xoff,d6
  6319.  move.w zoff,d7
  6320.  add.w xwobxoff,d7
  6321.  add.w xwobzoff,d6
  6322.  ext.l d6
  6323.  ext.l d7
  6324.  divs #3,d6
  6325.  divs #3,d7
  6326. ; asr.w #1,d6
  6327. ; asr.w #1,d7
  6328.  swap d6
  6329.  swap d7
  6330.  clr.w d6
  6331.  clr.w d7
  6332.  move.w scaleval(pc),d3
  6333.  beq.s .samescale
  6334.  bgt.s .scaledown
  6335.  neg.w d3
  6336.  asr.l d3,d7
  6337.  asr.l d3,d6
  6338.  bra.s .samescale
  6339. .scaledown:
  6340.  asl.l d3,d6
  6341.  asl.l d3,d7
  6342. .samescale
  6343.  move.l d6,sxoff
  6344.  move.l d7,szoff
  6345.  bra pastscale 
  6346.  
  6347.  asr.l #3,d1
  6348.  asr.l #3,d2
  6349.  asr.l #2,d1
  6350.  asr.l #2,d2
  6351.  asr.l #1,d1
  6352.  asr.l #1,d2
  6353. scaleprogfrom
  6354.  nop
  6355.  nop
  6356.  asl.l #1,d1
  6357.  asl.l #1,d2
  6358.  asl.l #2,d1
  6359.  asl.l #2,d2
  6360.  asl.l #3,d1
  6361.  asl.l #3,d2
  6362.  
  6363. top: dc.w 0
  6364. bottom: dc.w 0
  6365. ypos: dc.l 0
  6366. nfloors: dc.w 0
  6367. lighttype: dc.w 0
  6368. above: dc.w 0 
  6369. linedir: dc.w 0
  6370. distaddr: dc.w 0
  6371.  
  6372. minz: dc.w 0
  6373. leftsidetab:
  6374.  ds.w 256*2
  6375. rightsidetab:
  6376.  ds.w 256*2
  6377. leftbrighttab:
  6378.  ds.w 256*2
  6379. rightbrighttab:
  6380.  ds.w 256*2
  6381.  
  6382. PointBrights:
  6383.  dc.l 0
  6384. CurrentPointBrights:
  6385.  ds.l 1000
  6386.  
  6387. movespd: dc.w 0
  6388. largespd: dc.l 0
  6389. disttobot: dc.w 0
  6390.  
  6391. pastscale:
  6392.  
  6393.  tst.b drawit(pc)
  6394.  beq dontdrawfloor
  6395.  
  6396.  move.l a0,-(a7)
  6397.  
  6398.  move.l #leftsidetab,a4
  6399.  move.w top(pc),d1
  6400.  
  6401.   
  6402.  tst.w above
  6403.  beq.s clipfloor
  6404.  
  6405.  move.w MIDDLEY,d7
  6406.  subq #1,d7
  6407.  sub.w d1,d7
  6408.  move.w d7,disttobot
  6409.  
  6410.  move.w bottom(pc),d7
  6411.  move.w MIDDLEY,d3
  6412.  move.w d3,d4
  6413.  sub.w topclip,d3
  6414.  sub.w botclip,d4
  6415.  cmp.w d3,d1
  6416.  bge predontdrawfloor
  6417.  cmp.w d4,d7
  6418.  blt predontdrawfloor
  6419.  cmp.w d4,d1
  6420.  bge.s .nocliptoproof
  6421.  move.w d4,d1
  6422. .nocliptoproof
  6423.  cmp.w d3,d7
  6424.  blt doneclip
  6425.  move.w d3,d7
  6426.  bra doneclip
  6427.  
  6428. clipfloor:
  6429.  move.w #BOTTOMY,d7
  6430.  sub.w MIDDLEY,d7
  6431.  subq #1,d7
  6432.  sub.w d1,d7
  6433.  move.w d7,disttobot
  6434.  
  6435.  move.w bottom(pc),d7
  6436.  move.w botclip,d4
  6437.  sub.w MIDDLEY,d4
  6438.  cmp.w d4,d1
  6439.  bge predontdrawfloor
  6440.  move.w topclip,d3
  6441.  sub.w MIDDLEY,d3
  6442.  cmp.w d3,d1
  6443.  bge.s .nocliptopfloor
  6444.  move.w d3,d1
  6445. .nocliptopfloor 
  6446.  cmp.w d3,d7
  6447.  ble predontdrawfloor
  6448.  cmp.w d4,d7
  6449.  blt.s .noclipbotfloor
  6450.  move.w d4,d7
  6451. .noclipbotfloor:
  6452.  
  6453. doneclip:
  6454.  
  6455.  lea (a4,d1*2),a4
  6456. ; move.l #dists,a2
  6457.  move.w distaddr,d0
  6458.  muls #64,d0
  6459.  move.l d0,a2
  6460. ; muls #25,d0
  6461. ; adda.w d0,a2
  6462. ; lea (a2,d1*2),a2
  6463.  sub.w d1,d7
  6464.  ble predontdrawfloor 
  6465.  move.w d1,d0
  6466.  bne.s .notzero
  6467.  moveq #1,d0
  6468. .notzero
  6469.  muls linedir,d1
  6470.  add.l d1,a6
  6471.  move.l #floorscalecols,a1
  6472.  move.l LineToUse,a5
  6473.  
  6474.  tst.b gourfloor
  6475.  bne dogourfloor
  6476.  
  6477.  tst.b anyclipping
  6478.  beq dofloornoclip
  6479.  
  6480. dofloor:
  6481. ; move.w (a2)+,d0
  6482.  move.w leftclip(pc),d3
  6483.  move.w rightclip(pc),d4
  6484.  move.w rightsidetab-leftsidetab(a4),d2
  6485.  
  6486.  addq #1,d2
  6487.  cmp.w d3,d2
  6488.  ble.s nodrawline
  6489.  cmp.w d4,d2
  6490.  ble.s noclipright
  6491.  move.w d4,d2
  6492. noclipright:
  6493.  move.w (a4),d1
  6494.  cmp.w d4,d1
  6495.  bge.s nodrawline
  6496.  cmp.w d3,d1
  6497.  bge.s noclipleft
  6498.  move.w d3,d1
  6499. noclipleft:
  6500.  cmp.w d1,d2
  6501.  ble.s nodrawline
  6502.  
  6503.  move.w d1,leftedge
  6504.  move.w d2,rightedge
  6505.  
  6506. ; moveq #0,d1
  6507. ; moveq #0,d3
  6508. ; move.w leftbrighttab-leftsidetab(a4),d1
  6509. ; bge.s .okbl
  6510. ; moveq #0,d1
  6511. ;.okbl:
  6512.  
  6513. ; move.w rightbrighttab-leftsidetab(a4),d3
  6514. ; bge.s .okbr
  6515. ; moveq #0,d3
  6516. ;.okbr:
  6517.  
  6518. ; sub.w d1,d3
  6519. ; asl.w #8,d1
  6520. ; move.l d1,leftbright
  6521. ; swap d3
  6522. ; asr.l #5,d3
  6523. ; divs d5,d3
  6524. ; move.w d3,d5
  6525. ; muls.w d6,d5
  6526. ; asr.l #3,d5
  6527. ; clr.b d5
  6528. ; add.w d5,leftbright+2
  6529.  
  6530. ; ext.l d3
  6531. ; asl.l #5,d3
  6532. ; swap d3
  6533. ; asl.w #8,d3
  6534. ; move.l d3,brightspd
  6535.  
  6536.  move.l a6,a3
  6537.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6538.  move.l a2,d7
  6539.  divs d0,d7
  6540.  move.w d7,d0
  6541.  jsr (a5)
  6542.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6543. nodrawline
  6544.  sub.w #1,disttobot
  6545.  adda.w linedir(pc),a6
  6546.  addq #2,a4
  6547.  addq #1,d0
  6548.  subq #1,d7
  6549.  bgt dofloor
  6550.  
  6551. predontdrawfloor
  6552.  move.l (a7)+,a0
  6553.  
  6554. dontdrawfloor:
  6555.  
  6556.  rts
  6557.  
  6558. anyclipping: dc.w 0
  6559.  
  6560. dofloornoclip:
  6561. ; move.w (a2)+,d0
  6562.  move.w rightsidetab-leftsidetab(a4),d2
  6563.  addq #1,d2
  6564.  move.w (a4)+,d1
  6565.  move.w d1,leftedge
  6566.  move.w d2,rightedge
  6567.  
  6568. ; sub.w d1,d2
  6569.  
  6570. ; moveq #0,d1
  6571. ; moveq #0,d3
  6572. ; move.w leftbrighttab-leftsidetab(a4),d1
  6573. ; bge.s .okbl
  6574. ; moveq #0,d1
  6575. ;.okbl:
  6576.  
  6577. ; move.w rightbrighttab-leftsidetab(a4),d3
  6578. ; bge.s .okbr
  6579. ; moveq #0,d3
  6580. ;.okbr:
  6581.  
  6582. ; sub.w d1,d3
  6583. ; asl.w #8,d1
  6584. ; move.l d1,leftbright
  6585. ; swap d3
  6586. ; asr.l #5,d3
  6587. ; divs d2,d3
  6588. ; ext.l d3
  6589. ; asl.l #5,d3
  6590. ; swap d3
  6591. ; asl.w #8,d3
  6592. ; move.l d3,brightspd
  6593.  
  6594.  move.l a6,a3
  6595.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6596.  move.l a2,d7
  6597.  divs d0,d7
  6598.  move.w d7,d0
  6599.  jsr (a5)
  6600.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6601.  sub.w #1,disttobot
  6602.  adda.w linedir(pc),a6
  6603.  addq #1,d0
  6604.  subq #1,d7
  6605.  bgt dofloornoclip
  6606.  
  6607.  bra predontdrawfloor
  6608.  
  6609. dogourfloor:
  6610.  tst.b anyclipping
  6611.  beq dofloornoclipGOUR
  6612.  
  6613. dofloorGOUR:
  6614. ; move.w (a2)+,d0
  6615.  move.w leftclip(pc),d3
  6616.  move.w rightclip(pc),d4
  6617.  move.w rightsidetab-leftsidetab(a4),d2
  6618.  
  6619.  move.w d2,d5
  6620.  sub.w (a4),d5
  6621.  addq #1,d5
  6622.  moveq #0,d6
  6623.  
  6624.  addq #1,d2
  6625.  cmp.w d3,d2
  6626.  ble nodrawlineGOUR
  6627.  cmp.w d4,d2
  6628.  ble.s nocliprightGOUR
  6629.  move.w d4,d2
  6630. nocliprightGOUR:
  6631.  move.w (a4),d1
  6632.  cmp.w d4,d1
  6633.  bge nodrawlineGOUR
  6634.  cmp.w d3,d1
  6635.  bge.s noclipleftGOUR
  6636.  move.w d3,d6
  6637.  subq #1,d6
  6638.  sub.w d1,d6
  6639.  move.w d3,d1
  6640. noclipleftGOUR:
  6641.  cmp.w d1,d2
  6642.  ble nodrawlineGOUR
  6643.  
  6644.  move.w d1,leftedge
  6645.  move.w d2,rightedge
  6646.  
  6647.  move.l a2,d2
  6648.  divs d0,d2
  6649.  move.w d2,dst
  6650.  asr.w #7,d2
  6651. ; addq #5,d2
  6652. ; add.w lighttype,d2
  6653.  
  6654.  moveq #0,d1
  6655.  moveq #0,d3
  6656.  move.w leftbrighttab-leftsidetab(a4),d1
  6657.  add.w d2,d1
  6658.  bge.s .okbl
  6659.  moveq #0,d1
  6660. .okbl:
  6661. ; asr.w #1,d1
  6662.  cmp.w #31,d1
  6663.  ble.s .okdl
  6664.  move.w #31,d1
  6665. .okdl:
  6666.  
  6667.  move.w rightbrighttab-leftsidetab(a4),d3
  6668.  add.w d2,d3
  6669.  bge.s .okbr
  6670.  moveq #0,d3
  6671. .okbr:
  6672. ; asr.w #1,d3
  6673.  cmp.w #31,d3
  6674.  ble.s .okdr
  6675.  move.w #31,d3
  6676. .okdr:
  6677.  
  6678.  sub.w d1,d3
  6679.  asl.w #8,d1
  6680.  move.w d1,leftbright
  6681.  swap d3
  6682.  tst.l d3
  6683.  bgt.s .OKITSPOSALREADY 
  6684.  neg.l d3
  6685.  asr.l #6,d3
  6686.  divs d5,d3
  6687.  neg.w d3
  6688.  bra.s .OKNOWITSNEG
  6689.  
  6690. .OKITSPOSALREADY
  6691.  asr.l #6,d3
  6692.  divs d5,d3
  6693. .OKNOWITSNEG
  6694.  muls d3,d6
  6695.  add.w #256*4,d6
  6696.  asr.w #2,d6
  6697.  clr.b d6
  6698.  add.w leftbright,d6
  6699.  bge.s .oklbnn
  6700.  moveq #0,d6
  6701. .oklbnn:
  6702.  move.w d6,leftbright
  6703.  
  6704.  ext.l d3
  6705.  asr.l #2,d3
  6706. ; swap d3
  6707. ; asl.w #8,d3
  6708.  move.w d3,brightspd
  6709.  
  6710.  move.l a6,a3
  6711.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6712.  move.w dst,d0
  6713.  lea floorscalecols,a1
  6714.  move.l floortile,a0
  6715.  adda.w whichtile,a0
  6716.  jsr pastfloorbright
  6717.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6718. nodrawlineGOUR
  6719.  
  6720.  sub.w #1,disttobot
  6721.  
  6722.  adda.w linedir(pc),a6
  6723.  addq #2,a4
  6724.  addq #1,d0
  6725.  subq #1,d7
  6726.  bgt dofloorGOUR
  6727.  
  6728. predontdrawfloorGOUR
  6729.  move.l (a7)+,a0
  6730.  
  6731. dontdrawfloorGOUR:
  6732.  
  6733.  rts
  6734.  
  6735. dofloornoclipGOUR:
  6736. ; move.w (a2)+,d0
  6737.  move.w rightsidetab-leftsidetab(a4),d2
  6738.  addq #1,d2
  6739.  move.w (a4),d1
  6740.  move.w d1,leftedge
  6741.  move.w d2,rightedge
  6742.  
  6743.  sub.w d1,d2
  6744.  
  6745.  move.l a2,d6
  6746.  divs d0,d6
  6747.  move.w d6,d5
  6748.  asr.w #7,d5
  6749. ; addq #5,d5
  6750. ; add.w lighttype,d5
  6751.  
  6752.  moveq #0,d1
  6753.  moveq #0,d3
  6754.  move.w leftbrighttab-leftsidetab(a4),d1
  6755.  add.w d5,d1
  6756.  bge.s .okbl
  6757.  moveq #0,d1
  6758. .okbl:
  6759. ; asr.w #1,d1
  6760.  cmp.w #31,d1
  6761.  ble.s .okdl
  6762.  move.w #31,d1
  6763. .okdl:
  6764.  
  6765.  move.w rightbrighttab-leftsidetab(a4),d3
  6766.  add.w d5,d3
  6767.  bge.s .okbr
  6768.  moveq #0,d3
  6769. .okbr:
  6770. ; asr.w #1,d3
  6771.  cmp.w #31,d3
  6772.  ble.s .okdr
  6773.  move.w #31,d3
  6774. .okdr:
  6775.  
  6776. ; sub.w d1,d3
  6777. ; asl.w #8,d1
  6778. ; move.l d1,leftbright
  6779. ; swap d3
  6780. ; asr.l #5,d3
  6781. ; divs d2,d3
  6782. ; ext.l d3
  6783. ; asl.l #5,d3
  6784. ; swap d3
  6785. ; asl.w #8,d3
  6786. ; move.l d3,brightspd
  6787.  
  6788.  sub.w d1,d3
  6789.  asl.w #8,d1
  6790.  move.w d1,leftbright
  6791.  swap d3
  6792.  ext.l d2
  6793.  divs.l d2,d3
  6794.  asr.l #8,d3
  6795.  move.w d3,brightspd
  6796.  
  6797.  move.l a6,a3
  6798.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6799.  move.w d6,d0
  6800.  move.w d0,dst
  6801.  lea floorscalecols,a1
  6802.  move.l floortile,a0
  6803.  adda.w whichtile,a0
  6804.  jsr pastfloorbright
  6805.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6806.  sub.w #1,disttobot
  6807.  adda.w linedir(pc),a6
  6808.  addq #2,a4
  6809.  addq #1,d0
  6810.  subq #1,d7
  6811.  bgt dofloornoclipGOUR
  6812.  
  6813.  bra predontdrawfloorGOUR
  6814.  
  6815.  
  6816.  
  6817. dists:
  6818. ; incbin "floordists"
  6819. drawit: dc.w 0
  6820.  
  6821. LineToUse: dc.l 0
  6822.  
  6823. ***************************
  6824. * Right then, time for the floor
  6825. * routine...
  6826. * For test purposes, give it
  6827. * a3 = point to screen
  6828. * d0= z distance away
  6829. * and sinval+cosval must be set up.
  6830. ***************************
  6831.  
  6832. BLACKFLOOR:
  6833.  moveq #0,d0
  6834.  bra.s DOBLACK
  6835.  
  6836. SimpleFloorLine:
  6837.  
  6838.  CACHE_OFF d2
  6839.  
  6840.  move.l #doacrossline,a1
  6841.  move.w leftedge(pc),d1
  6842.  move.w rightedge(pc),d3
  6843.  sub.w d1,d3
  6844.  lea (a1,d1.w*4),a1
  6845.  move.w (a1,d3.w*4),d4
  6846.  move.w #$4e75,(a1,d3.w*4)
  6847.  
  6848.  tst.b CLRNOFLOOR
  6849.  bne.s BLACKFLOOR
  6850.  
  6851.  move.l #PLAINSCALE,a2
  6852.  
  6853.  move.w d0,d2
  6854.  move.w lighttype,d1
  6855.  asr.w #8,d2
  6856.  add.w #5,d1
  6857.  add.w d2,d1
  6858.  bge.s .fixedbright
  6859.  moveq #0,d1
  6860. .fixedbright:
  6861.  cmp.w #28,d1
  6862.  ble.s .smallbright
  6863.  move.w #28,d1
  6864. .smallbright:
  6865.  lea (a2,d1.w*2),a2
  6866.  
  6867.  move.w whichtile,d0
  6868.  move.w d0,d1
  6869.  and.w #$3,d1
  6870.  and.w #$300,d0
  6871.  lsl.b #6,d1
  6872.  move.b d1,d0
  6873.  move.w d0,tstwhich
  6874.  move.w (a2,d0.w),d0
  6875.  
  6876. DOBLACK:
  6877.  jsr (a1)
  6878.  move.w d4,(a1,d3.w*4)
  6879.  
  6880.  CACHE_ON d2
  6881.  
  6882.  rts
  6883.  
  6884. tstwhich: dc.w 0
  6885. whichtile: dc.w 0
  6886.   
  6887. PLAINSCALE: incbin "ab3:includes/plainscale"
  6888.   
  6889. storeit: dc.l 0
  6890.  
  6891. doacrossline:
  6892. val SET 0
  6893.  REPT 32
  6894.  move.w d0,val(a3)
  6895. val SET val+4
  6896.  ENDR
  6897. val SET val+4
  6898.  REPT 32
  6899.  move.w d0,val(a3)
  6900. val SET val+4
  6901.  ENDR
  6902. val SET val+4
  6903.  REPT 32
  6904.  move.w d0,val(a3)
  6905. val SET val+4
  6906.  ENDR
  6907.  rts
  6908.  
  6909.  
  6910. leftedge: dc.w 0
  6911. rightedge: dc.w 0
  6912.  
  6913. rndpt: dc.l rndtab
  6914.  
  6915.  
  6916. dst: dc.w 0
  6917.  
  6918. FloorLine:
  6919.  
  6920.  move.l floortile,a0
  6921.  adda.w whichtile,a0
  6922.  move.w lighttype,d1
  6923.  move.w d0,dst
  6924.  move.w d0,d2
  6925. *********************
  6926. * Old version
  6927.  asr.w #8,d2
  6928.  add.w #5,d1
  6929. *********************
  6930. ; asr.w #3,d2
  6931. ; sub.w #4,d2
  6932. ; cmp.w #6,d2
  6933. ; blt.s flbrbr
  6934. ; move.w #6,d2
  6935. ;flbrbr:
  6936. *********************
  6937.  add.w d2,d1
  6938.  bge.s .fixedbright
  6939.  moveq #0,d1
  6940. .fixedbright:
  6941.  cmp.w #28,d1
  6942.  ble.s .smallbright
  6943.  move.w #28,d1
  6944. .smallbright:
  6945.  lea floorscalecols,a1
  6946.  add.l floorbright(pc,d1.w*4),a1
  6947.  bra pastfloorbright
  6948.  
  6949. ConstCol: dc.w 0
  6950.  
  6951. BumpLine:
  6952.  
  6953.  tst.b smoothbumps
  6954.  beq.s Chunky
  6955.  
  6956.  move.l #SmoothTile,a0
  6957.  lea Smoothscalecols,a1
  6958.  bra pastast
  6959.  
  6960. Chunky:
  6961.  
  6962.  moveq #0,d2
  6963.  move.l #Bumptile,a0
  6964.  move.w whichtile,d2
  6965.  adda.w d2,a0
  6966.  ror.l #2,d2
  6967.  lsr.w #6,d2
  6968.  rol.l #2,d2
  6969.  and.w #15,d2
  6970.  move.l #ConstCols,a1
  6971.  move.w (a1,d2.w*2),ConstCol
  6972.  lea Bumpscalecols,a1
  6973.  
  6974. pastast:
  6975.  move.w lighttype,d1
  6976.  
  6977.  move.w d0,dst
  6978.  
  6979.  move.w d0,d2
  6980. *********************
  6981. * Old version
  6982.  asr.w #8,d2
  6983.  add.w #5,d1
  6984. *********************
  6985. ; asr.w #3,d2
  6986. ; sub.w #4,d2
  6987. ; cmp.w #6,d2
  6988. ; blt.s flbrbr
  6989. ; move.w #6,d2
  6990. ;flbrbr:
  6991. *********************
  6992.  add.w d2,d1
  6993.  bge.s .fixedbright
  6994.  moveq #0,d1
  6995. .fixedbright:
  6996.  cmp.w #31,d1
  6997.  ble.s .smallbright
  6998.  move.w #31,d1
  6999. .smallbright:
  7000.  add.l floorbright(pc,d1.w*4),a1
  7001.  bra pastfloorbright
  7002.  
  7003.  
  7004. floorbright:
  7005.  dc.l 512*0
  7006.  dc.l 512*1
  7007.  dc.l 512*2
  7008.  dc.l 512*3
  7009.  dc.l 512*4
  7010.  
  7011.  dc.l 512*5
  7012.  dc.l 512*6
  7013.  dc.l 512*7
  7014.  dc.l 512*8
  7015.  dc.l 512*9
  7016.  
  7017.  dc.l 512*10
  7018.  dc.l 512*11
  7019.  dc.l 512*12
  7020.  dc.l 512*13
  7021.  dc.l 512*14
  7022.  
  7023.  dc.l 512*15
  7024.  dc.l 512*16
  7025.  dc.l 512*17
  7026.  dc.l 512*18
  7027.  dc.l 512*19
  7028.  
  7029.  dc.l 512*20
  7030.  dc.l 512*21
  7031.  dc.l 512*22
  7032.  dc.l 512*23
  7033.  dc.l 512*24
  7034.  
  7035.  dc.l 512*25
  7036.  dc.l 512*26
  7037.  dc.l 512*27
  7038.  dc.l 512*28
  7039.  dc.l 512*29
  7040.  
  7041.  dc.l 512*30
  7042.  dc.l 512*31
  7043.  
  7044. widthleft: dc.w 0
  7045. scaleval: dc.w 0
  7046. sxoff: dc.l 0
  7047. szoff: dc.l 0
  7048. xoff34: dc.w 0
  7049. zoff34: dc.w 0
  7050. scosval: dc.w 0
  7051. ssinval: dc.w 0
  7052.  
  7053.  
  7054. floorsetbright:
  7055.  move.l #walltiles,a0
  7056.  
  7057. pastfloorbright
  7058.  move.w d0,d1
  7059.  muls cosval,d1    ; change in x across whole width
  7060.  move.w d0,d2
  7061.  muls sinval,d2    ; change in z across whole width
  7062.  neg.l d2
  7063. scaleprog:
  7064.  move.w scaleval(pc),d3
  7065.  beq.s .samescale
  7066.  bgt.s .scaledown
  7067.  neg.w d3
  7068.  asr.l d3,d1
  7069.  asr.l d3,d2
  7070.  bra.s .samescale
  7071. .scaledown:
  7072.  asl.l d3,d1
  7073.  asl.l d3,d2
  7074. .samescale
  7075.  
  7076.  move.l d1,d3 ;    z cos
  7077.  move.l d3,d6
  7078.  move.l d3,d5
  7079.  asr.l #1,d6
  7080.  add.l d6,d3
  7081.  asr.l #1,d3
  7082.  
  7083.  move.l d2,d4    ; z sin
  7084.  move.l d4,d6
  7085.  asr.l #1,d6
  7086.  add.l d4,d6
  7087.  add.l d3,d4
  7088.  neg.l d4    ; start x
  7089.  
  7090.  asr.l #1,d6    ; zsin/2
  7091.  sub.l d6,d5    ; start z
  7092.  
  7093.  add.l sxoff,d4
  7094.  add.l szoff,d5
  7095.  
  7096.  moveq #0,d6
  7097.  move.w leftedge(pc),d6
  7098.  beq.s nomultleft
  7099.  
  7100.  add.l d6,d6
  7101.  divs #3,d6
  7102.  ext.l d6
  7103.  
  7104.  move.l d1,a4
  7105.  move.l d2,a5
  7106.  
  7107.  muls.l d6,d3:d1
  7108.  asr.l #7,d1
  7109.  add.l d1,d4
  7110.  
  7111.  muls.l d6,d3:d2
  7112.  asr.l #7,d2
  7113.  add.l d2,d5
  7114.  move.l a4,d1
  7115.  move.l a5,d2
  7116.  
  7117.  move.w leftedge(pc),d6
  7118.  
  7119. nomultleft:
  7120.  
  7121.  
  7122.  move.w d4,startsmoothx
  7123.  move.w d5,startsmoothz
  7124.  
  7125.  asr.l #8,d4
  7126.  asl.l #8,d5
  7127. ; add.w szoff,d5
  7128. ; add.w sxoff,d4
  7129. ; and.w #63,d4
  7130. ; and.w #63*256,d5
  7131.  move.w d4,d5
  7132.  
  7133.  asr.l #6,d1
  7134.  asr.l #6,d2
  7135.  divs.l #3,d1
  7136.  divs.l #3,d2
  7137.  move.w d1,a4
  7138.  move.w d2,a5
  7139.  asl.l #8,d2
  7140. ; and.w #%0011111100000000,d2
  7141.  asr.l #8,d1
  7142.  move.w d1,d2
  7143.  move.l #$3fff3fff,d1
  7144.  and.l d1,d5
  7145. ; swap d5
  7146. ; move.w startsmoothz,d5
  7147. ; swap d5
  7148. ; swap d2
  7149. ; move.w a5,d2
  7150. ; swap d2
  7151.  
  7152. ***********************************
  7153.  
  7154.  move.w d6,a2
  7155. ; move.l d2,d6
  7156. ; add.w #256,d6
  7157.  
  7158.  moveq #0,d0
  7159.  
  7160. ; tst.w a2
  7161. ; beq startatleftedge
  7162.  
  7163. ; move.w widthleft(pc),d4
  7164.  
  7165.  move.w rightedge(pc),d3
  7166.  
  7167.  lea (a3,a2.w*2),a3
  7168.  move.w d3,d7
  7169.  sub.w a2,d7
  7170.  bra intofirststrip
  7171.  
  7172.  cmp.w #31,a2
  7173.  bgt.s notinfirststrip
  7174.  lea (a3,a2.w*4),a3
  7175.  cmp.w #32,d3
  7176.  ble.s allinfirststrip
  7177.  move.w #32,d7
  7178.  sub.w d7,d3
  7179.  sub.w a2,d7
  7180.  bra intofirststrip
  7181.  
  7182. allinfirststrip
  7183.  sub.w a2,d3
  7184.  move.w d3,d7
  7185.  move.w #0,d4
  7186.  bra allintofirst
  7187.  
  7188. notinfirststrip:
  7189.  sub.w #32,a2
  7190.  sub.w #32,d3
  7191.  adda.w #33*4,a3
  7192.  cmp.w #31,a2
  7193.  bgt.s notstartinsec
  7194.  lea (a3,a2.w*4),a3
  7195.  cmp.w #32,d3
  7196.  ble.s allinsecstrip
  7197.  move.w #32,d7
  7198.  sub.w d7,d3
  7199.  sub.w a2,d7
  7200.  move.w d3,d4
  7201.  bra allintofirst
  7202.  
  7203. allinsecstrip
  7204.  sub.w a2,d3
  7205.  move.w d3,d7
  7206.  move.w #0,d4
  7207.  bra allintofirst
  7208.  rts
  7209.  
  7210. prot8: dc.w 0
  7211.  
  7212. notstartinsec:
  7213.  sub.w #32,a2
  7214.  sub.w #32,d3
  7215.  adda.w #33*4,a3
  7216.  lea (a3,a2.w*4),a3
  7217.  cmp.w #32,d3
  7218.  ble.s allinthirdstrip
  7219.  move.w #32,d7
  7220.  sub.w d7,d3
  7221.  sub.w a2,d7
  7222.  move.w d3,d4
  7223.  bra allintofirst
  7224.  rts
  7225.  
  7226. allinthirdstrip
  7227.  sub.w a2,d3
  7228.  move.w d3,d7
  7229.  move.w #0,d4
  7230.  bra allintofirst
  7231.  rts
  7232.  
  7233. startatleftedge:
  7234.  
  7235. ; move.w rightedge(pc),d3
  7236. ; sub.w a2,d3
  7237. ; move.w d3,d7
  7238. ; cmp.w #32,d7
  7239. ; ble.s .notoowide
  7240. ; move.w #32,d7
  7241. ;.notoowide:
  7242. ; sub.w d7,d3
  7243. intofirststrip:
  7244. ;
  7245. ; move.w d3,d4
  7246. allintofirst:
  7247.  
  7248.  move.w startsmoothx,d3
  7249.  
  7250. tstwat:
  7251.  
  7252.  tst.b gourfloor
  7253.  bne gouraudfloor
  7254.  
  7255.  tst.b usewater
  7256.  bne texturedwater
  7257.  
  7258.  
  7259. ******************************
  7260. * BumpMap the floor/ceiling! *
  7261.  tst.b usebumps
  7262.  bne.s BumpMap
  7263. ******************************
  7264.  
  7265. ordinary:
  7266.  moveq #0,d0
  7267.  
  7268.  dbra d7,acrossscrn
  7269.  rts
  7270.  
  7271. usebumps: dc.w $0
  7272. smoothbumps: dc.w $0
  7273. gourfloor: dc.w 0
  7274.  
  7275.  include "ab3:source_4000/bumpmap.s"
  7276.  
  7277.  CNOP 0,4
  7278. backbefore:
  7279.  and.w d1,d5
  7280.  move.b (a0,d5.w*4),d0
  7281.  add.w a4,d3
  7282.  move.w (a1,d0.w*2),(a3)
  7283.  addq #4,a3
  7284.  addx.l d6,d5
  7285.  dbcs d7,acrossscrn
  7286.  dbcc d7,backbefore
  7287.  bra.s past1
  7288.  
  7289. acrossscrn:
  7290.  and.w d1,d5
  7291.  move.b (a0,d5.w*4),d0
  7292.  add.w a4,d3
  7293.  move.w (a1,d0.w*2),(a3)
  7294.  addq #4,a3
  7295.  addx.l d2,d5
  7296.  dbcs d7,acrossscrn
  7297.  dbcc d7,backbefore
  7298. past1:
  7299.  bcc.s gotoacross
  7300.  
  7301.  move.w d4,d7
  7302.  bne.s .notdoneyet
  7303.  rts
  7304. .notdoneyet:
  7305.  
  7306.  cmp.w #32,d7
  7307.  ble.s .notoowide
  7308.  move.w #32,d7
  7309. .notoowide
  7310.  sub.w d7,d4  
  7311.  addq #4,a3
  7312.  
  7313.  dbra d7,backbefore
  7314.  rts
  7315.  
  7316.  
  7317. gotoacross:
  7318.  
  7319.  move.w d4,d7
  7320.  bne.s .notdoneyet
  7321.  rts
  7322. .notdoneyet:
  7323.  
  7324.  cmp.w #32,d7
  7325.  ble.s .notoowide
  7326.  move.w #32,d7
  7327. .notoowide
  7328.  sub.w d7,d4  
  7329.  addq #4,a3
  7330.  
  7331.  dbra d7,acrossscrn
  7332.  rts
  7333.  
  7334. leftbright: dc.l 0
  7335. brightspd: dc.l 0
  7336.  
  7337. gouraudfloor:
  7338.  
  7339.  move.w leftbright,d0
  7340.  move.l d1,d4
  7341.  move.w brightspd,d1
  7342.  
  7343.  move.w d7,d3
  7344.  asr.w #1,d7
  7345.  btst #0,d3
  7346.  beq.s .nosingle1
  7347.  move.w d5,d3
  7348.  move.l d5,d6
  7349.  lsr.w #8,d3
  7350.  swap d6
  7351.  move.b d3,d6
  7352.  move.w d0,d3
  7353.  move.b (a0,d6.w*4),d3
  7354.  add.w d1,d0
  7355.  add.l d2,d5
  7356.  and.l d4,d5
  7357.  move.w (a1,d3.w*2),(a3)+
  7358. .nosingle1
  7359.  
  7360.  move.w d7,d3
  7361.  asr.w #1,d7
  7362.  btst #0,d3
  7363.  beq.s .nosingle2
  7364.  move.w d5,d3
  7365.  move.l d5,d6
  7366.  lsr.w #8,d3
  7367.  swap d6
  7368.  move.b d3,d6
  7369.  move.w d0,d3
  7370.  move.b (a0,d6.w*4),d3
  7371.  add.w d1,d0
  7372.  add.l d2,d5
  7373.  and.l d4,d5
  7374.  move.l d5,d6
  7375.  swap d6
  7376.  move.w (a1,d3.w*2),(a3)+
  7377.  move.w d5,d3
  7378.  lsr.w #8,d3
  7379.  move.b d3,d6
  7380.  move.w d0,d3
  7381.  move.b (a0,d6.w*4),d3
  7382.  add.w d1,d0
  7383.  add.l d2,d5
  7384.  and.l d4,d5
  7385.  move.w (a1,d3.w*2),(a3)+
  7386.  
  7387. .nosingle2
  7388.  
  7389.  move.l d5,d6
  7390.  swap d6
  7391.  
  7392.  dbra d7,acrossscrngour
  7393.  rts
  7394.  
  7395.  CNOP 0,4
  7396.  
  7397. acrossscrngour:
  7398.  move.w d5,d3
  7399.  lsr.w #8,d3
  7400.  move.b d3,d6
  7401.  move.w d0,d3
  7402.  move.b (a0,d6.w*4),d3
  7403.  add.w d1,d0
  7404.  add.l d2,d5
  7405.  and.l d4,d5
  7406.  move.l d5,d6
  7407.  swap d6
  7408.  move.w (a1,d3.w*2),(a3)+
  7409.  move.w d5,d3
  7410.  lsr.w #8,d3
  7411.  move.b d3,d6
  7412.  move.w d0,d3
  7413.  move.b (a0,d6.w*4),d3
  7414.  add.w d1,d0
  7415.  add.l d2,d5
  7416.  and.l d4,d5
  7417.  move.l d5,d6
  7418.  swap d6
  7419.  move.w (a1,d3.w*2),(a3)+
  7420.  move.w d5,d3
  7421.  lsr.w #8,d3
  7422.  move.b d3,d6
  7423.  move.w d0,d3
  7424.  move.b (a0,d6.w*4),d3
  7425.  add.w d1,d0
  7426.  add.l d2,d5
  7427.  and.l d4,d5
  7428.  move.l d5,d6
  7429.  swap d6
  7430.  move.w (a1,d3.w*2),(a3)+
  7431.  move.w d5,d3
  7432.  lsr.w #8,d3
  7433.  move.b d3,d6
  7434.  move.w d0,d3
  7435.  move.b (a0,d6.w*4),d3
  7436.  add.w d1,d0
  7437.  add.l d2,d5
  7438.  and.l d4,d5
  7439.  move.l d5,d6
  7440.  swap d6
  7441.  move.w (a1,d3.w*2),(a3)+
  7442.  dbra d7,acrossscrngour
  7443.  
  7444.  
  7445.  rts
  7446.  
  7447.  move.w d4,d7
  7448.  bne.s .notdoneyet
  7449.  move.l d0,leftbright
  7450.  
  7451.  rts
  7452. .notdoneyet:
  7453.  
  7454.  cmp.w #32,d7
  7455.  ble.s .notoowide
  7456.  move.w #32,d7
  7457. .notoowide
  7458.  sub.w d7,d4  
  7459.  addq #4,a3
  7460.  
  7461. ; dbra d7,backbeforegour
  7462.  rts
  7463.  
  7464.  
  7465. gotoacrossgour:
  7466.  
  7467.  move.w d4,d7
  7468.  bne.s .notdoneyet
  7469.  rts
  7470. .notdoneyet:
  7471.  
  7472.  cmp.w #32,d7
  7473.  ble.s .notoowide
  7474.  move.w #32,d7
  7475. .notoowide
  7476.  sub.w d7,d4  
  7477.  addq #4,a3
  7478.  
  7479.  dbra d7,acrossscrngour
  7480.  rts
  7481.  
  7482.  
  7483. waterpt: dc.l waterlist
  7484.  
  7485. waterlist:
  7486.  dc.l waterfile
  7487.  dc.l waterfile+2
  7488.  dc.l waterfile+256
  7489.  dc.l waterfile+256+2
  7490.  dc.l waterfile+512
  7491.  dc.l waterfile+512+2
  7492.  dc.l waterfile+768
  7493.  dc.l waterfile+768+2
  7494. ; dc.l waterfile+768
  7495. ; dc.l waterfile+512+2
  7496. ; dc.l waterfile+512
  7497. ; dc.l waterfile+256+2
  7498. ; dc.l waterfile+256
  7499. ; dc.l waterfile+2
  7500. endwaterlist:
  7501.  
  7502. watertouse: dc.l waterfile
  7503.  
  7504. wtan: dc.w 0
  7505. wateroff: dc.l 0
  7506.  
  7507. texturedwater:
  7508.  
  7509.  move.l d1,d4
  7510.  
  7511.  add.l wateroff,d5
  7512.  
  7513.  move.l #brightentab,a1
  7514.  move.w dst,d0
  7515.  clr.b d0
  7516.  
  7517.  add.w d0,d0
  7518.  cmp.w #12*512,d0
  7519.  blt.s .notoowater
  7520.  move.w #12*512,d0
  7521.  
  7522.  
  7523. .notoowater:
  7524.   
  7525.  adda.w d0,a1
  7526.  
  7527.  move.w dst,d0
  7528.  asl.w #7,d0
  7529.  add.w wtan,d0
  7530.  and.w #8191,d0
  7531.  move.l #SineTable,a0
  7532.  move.w (a0,d0.w),d0
  7533.  ext.l d0
  7534.  
  7535.  move.w dst,d3
  7536.  add.w #300,d3
  7537.  divs d3,d0
  7538.  asr.w #5,d0
  7539.  addq #4,d0
  7540.  cmp.w disttobot,d0
  7541.  blt.s oknotoffbototot
  7542.  
  7543.  move.w disttobot,d0
  7544.  subq #1,d0
  7545.  
  7546. oknotoffbototot
  7547.  
  7548. ; move.w dst,d3
  7549. ; asr.w #7,d3
  7550. ; add.w d3,d0
  7551.  
  7552.  muls #320*2,d0
  7553.  tst.w above
  7554.  beq.s nonnnnneg
  7555.  neg.l d0
  7556.  
  7557. nonnnnneg:
  7558.  
  7559.  move.l d0,a6
  7560.  
  7561.  move.l watertouse,a0
  7562.  
  7563.  move.w startsmoothx,d3
  7564.  dbra d7,acrossscrnw
  7565.  rts
  7566.  
  7567. backbeforew:
  7568.  and.w d1,d5
  7569.  move.w (a0,d5.w*4),d0
  7570.  move.b (a3,a6.w),d0
  7571.  move.w (a1,d0.w*2),(a3)+
  7572.  add.w a4,d3
  7573.  addx.l d6,d5
  7574.  dbcs d7,acrossscrnw
  7575.  dbcc d7,backbeforew
  7576.  rts
  7577.  
  7578. acrossscrnw:
  7579.  move.w d5,d3
  7580.  move.l d5,d6
  7581.  lsr.w #8,d3
  7582.  swap d6
  7583.  move.b d3,d6
  7584.  move.w (a0,d6.w*4),d0
  7585.  add.l d2,d5
  7586.  move.b (a3,a6.w),d0
  7587.  and.l d4,d5
  7588.  move.w (a1,d0.w*2),(a3)+
  7589.  dbra d7,acrossscrnw
  7590.  rts
  7591.  
  7592. usewater: dc.w 0
  7593.  dc.w 0
  7594. startsmoothx: dc.w 0
  7595.  dc.w 0
  7596. startsmoothz: dc.w 0
  7597.  
  7598. ********************************
  7599. *
  7600.  include "AB3:source_4000/ObjDrawFULLSCREEN.s"
  7601. *
  7602. ********************************
  7603.  
  7604. numframes:
  7605.  dc.w 0
  7606.  
  7607. alframe: dc.l 0
  7608.  
  7609. alan:
  7610.  dcb.l 8,0
  7611.  dcb.l 8,1
  7612.  dcb.l 8,2
  7613.  dcb.l 8,3
  7614. endalan:
  7615.  
  7616. alanptr: dc.l alan
  7617.  
  7618. Time2: dc.l 0
  7619. dispco:
  7620.  dc.w 0
  7621.  
  7622.  
  7623. key_interrupt:
  7624.         movem.l    d0-d7/a0-a6,-(sp)
  7625.  
  7626. ;        move.w    INTREQR,d0
  7627. ;        btst    #3,d0
  7628. ;        beq    .not_key
  7629.  
  7630.         move.b    $bfdd00,d0
  7631.         btst    #0,d0
  7632.         bne    .key_cont
  7633. ;        move.b    $bfed01,d0
  7634. ;        btst    #0,d0
  7635. ;        bne    .key_cont
  7636.     
  7637. ;        btst    #3,d0
  7638. ;        beq    .key_cont
  7639.  
  7640.         move.b    $bfec01,d0
  7641.         clr.b    $bfec01
  7642.  
  7643.         tst.b    d0
  7644.         beq    .key_cont
  7645.  
  7646. ;        bset    #6,$bfee01
  7647. ;        move.b    #$f0,$bfe401
  7648. ;        move.b    #$00,$bfe501
  7649. ;        bset    #0,$bfee01
  7650.  
  7651.  
  7652.         not.b    d0
  7653.         ror.b    #1,d0
  7654.         lea.l    KeyMap,a0
  7655.         tst.b    d0
  7656.         bmi.b    .key_up
  7657.         and.w    #$7f,d0
  7658. ;        add.w    #1,d0
  7659.         move.b    #$ff,(a0,d0.w)
  7660.         move.b    d0,lastpressed
  7661.  
  7662.         bra.b    .key_cont2
  7663. .key_up:
  7664.         and.w    #$7f,d0
  7665. ;        add.w    #1,d0
  7666.         move.b    #$00,(a0,d0.w)
  7667.  
  7668. .key_cont2
  7669. ;        btst    #0,$bfed01
  7670. ;        beq    .key_cont2
  7671. ;        move.b    #%00000000,$bfee01
  7672. ;        move.b    #%10001000,$bfed01
  7673.  
  7674. ;alt keys should not be independent so overlay ralt on lalt
  7675.  
  7676.         
  7677. .key_cont
  7678.  
  7679. ;        move.w    #$0008,INTREQ
  7680. .not_key:    ;lea.l    $dff000,a5
  7681.  
  7682. ;        lea.l    _keypressed(pc),a0
  7683. ;        move.b    101(a0),d0    ;read LALT
  7684. ;        or.b    102(a0),d0    ;blend it with RALT
  7685. ;        move.b    d0,127(a0)    ;save in combined position
  7686.  
  7687.         movem.l    (sp)+,d0-d7/a0-a6
  7688.  
  7689.         rts
  7690.  
  7691. lastpressed:    dc.b 0
  7692. KInt_CCode    Ds.b    1
  7693. KInt_Askey    Ds.b    1
  7694. KInt_OCode    Ds.w    1
  7695.  
  7696.  
  7697. OldSpace: dc.b 0
  7698. SpaceTapped: dc.b 0
  7699. PLR1_SPCTAP: dc.b 0
  7700. PLR2_SPCTAP: dc.b 0
  7701. PLR1_Ducked: dc.b 0
  7702. PLR2_Ducked: dc.b 0
  7703.  even
  7704.  
  7705.  include "ab3:source_4000/PLR1CONTROL.s"
  7706.  include "ab3:source_4000/PLR2CONTROL.s"
  7707.  include "ab3:source_4000/FALL.s"
  7708.  
  7709. prot7: dc.w 0
  7710.  
  7711. GOTTOSEND: dc.w 0
  7712.  
  7713. OtherInter:
  7714.  move.w #$0010,$dff000+intreq
  7715.  movem.l d0-d7/a0-a6,-(a7)
  7716.  bra justshake
  7717.  
  7718.     cnop 0,4
  7719.  
  7720. Chan0inter:
  7721.  
  7722.     SAVEREGS
  7723.     jsr    .routine
  7724.     GETREGS
  7725.  
  7726. ;    move.w    #1024+'.',$dff030
  7727.     
  7728.     moveq #0,d0
  7729.     rts
  7730.  
  7731. .routine
  7732.  
  7733.     
  7734. ;w move.w #$0010,$dff000+intreq
  7735.  
  7736.  tst.b doanything
  7737.  bne.s dosomething
  7738.  
  7739.  movem.l d0-d7/a0-a6,-(a7)
  7740.  bra JUSTSOUNDS
  7741.  
  7742.  rts
  7743.  
  7744. dosomething:
  7745.  
  7746.  
  7747.  addq.w #1,FramesToDraw
  7748.  movem.l d0-d7/a0-a6,-(a7)
  7749.  
  7750.  move.l #KeyMap,a5
  7751.  move.w STOPOFFSET,d0
  7752.  tst.b 27(a5)
  7753.  beq.s .nolookup
  7754.  sub.w #5,d0
  7755.  cmp.w #-80,d0
  7756.  bgt.s .nolookup
  7757.  move.w #-80,d0
  7758. .nolookup:
  7759.  tst.b 42(a5)
  7760.  beq.s .nolookdown
  7761.  add.w #5,d0
  7762.  cmp.w #80,d0
  7763.  blt.s .nolookdown
  7764.  move.w #80,d0
  7765. .nolookdown:
  7766.  
  7767.  move.w d0,STOPOFFSET
  7768.  neg.w d0
  7769.  add.w #120,d0
  7770.  move.w d0,SMIDDLEY
  7771.  muls #320*2,d0
  7772.  move.l d0,SBIGMIDDLEY
  7773.  
  7774. ; move.w STOPOFFSET,d0
  7775. ; tst.b 27(a5)
  7776. ; beq.s .nolookup
  7777. ; sub.w #5,d0
  7778. ; cmp.w #-80,d0
  7779. ; bgt.s .nolookup
  7780. ; move.w #-80,d0
  7781. ;.nolookup:
  7782. ; tst.b 42(a5)
  7783. ; beq.s .nolookdown
  7784. ; add.w #5,d0
  7785. ; cmp.w #80,d0
  7786. ; blt.s .nolookdown
  7787. ; move.w #80,d0
  7788. ;.nolookdown:
  7789. ;
  7790. ; move.w d0,STOPOFFSET
  7791. ; neg.w d0
  7792. ; add.w #40,d0
  7793. ; move.w d0,SMIDDLEY
  7794. ; muls #320*2,d0
  7795. ; move.l d0,SBIGMIDDLEY
  7796.  
  7797.  
  7798. ; jsr INITREC
  7799. ; jsr RECEIVE
  7800.  
  7801. ; tst.l BUFFER
  7802. ; beq.s justshake
  7803. ; st GOTTOSEND
  7804. ; move.l #OtherInter,$6c
  7805.  
  7806. justshake:
  7807.  
  7808.  cmp.b #'b',Prefsfile+3
  7809.  bne.s .noback
  7810.  jsr mt_music
  7811. .noback:
  7812.  
  7813.  bra dontshowtime
  7814.  
  7815.  tst.b oktodisplay
  7816.  beq dontshowtime
  7817.  clr.b oktodisplay
  7818.  subq.w #1,dispco
  7819.  bgt dontshowtime
  7820.  move.w #10,dispco
  7821.  
  7822.  move.l #TimerScr+10,a0
  7823.  move.l TimeCount,d0
  7824.  bge.s timenotneg
  7825.  move.l #1111*256,d0
  7826. timenotneg:
  7827.  asr.l #8,d0
  7828.  move.l #digits,a1
  7829.  move.w #7,d2
  7830. digitlop
  7831.  divs #10,d0
  7832.  swap d0
  7833.  lea (a1,d0.w*8),a2
  7834.  move.b (a2)+,(a0)
  7835.  move.b (a2)+,24(a0)
  7836.  move.b (a2)+,24*2(a0)
  7837.  move.b (a2)+,24*3(a0)
  7838.  move.b (a2)+,24*4(a0)
  7839.  move.b (a2)+,24*5(a0)
  7840.  move.b (a2)+,24*6(a0)
  7841.  move.b (a2)+,24*7(a0)
  7842.  subq #1,a0
  7843.  swap d0
  7844.  ext.l d0
  7845.  dbra d2,digitlop
  7846.  
  7847.  move.l #TimerScr+10+24*10,a0
  7848.  move.l NumTimes,d0
  7849.  move.l #digits,a1
  7850.  move.w #3,d2
  7851. digitlop2
  7852.  divs #10,d0
  7853.  swap d0
  7854.  lea (a1,d0.w*8),a2
  7855.  move.b (a2)+,(a0)
  7856.  move.b (a2)+,24(a0)
  7857.  move.b (a2)+,24*2(a0)
  7858.  move.b (a2)+,24*3(a0)
  7859.  move.b (a2)+,24*4(a0)
  7860.  move.b (a2)+,24*5(a0)
  7861.  move.b (a2)+,24*6(a0)
  7862.  move.b (a2)+,24*7(a0)
  7863.  subq #1,a0
  7864.  swap d0
  7865.  ext.l d0
  7866.  dbra d2,digitlop2
  7867.  
  7868.  move.l #TimerScr+10+24*20,a0
  7869.  moveq #0,d0
  7870.  move.w FramesToDraw,d0
  7871.  move.l #digits,a1
  7872.  move.w #2,d2
  7873. digitlop3
  7874.  divs #10,d0
  7875.  swap d0
  7876.  lea (a1,d0.w*8),a2
  7877.  move.b (a2)+,(a0)
  7878.  move.b (a2)+,24(a0)
  7879.  move.b (a2)+,24*2(a0)
  7880.  move.b (a2)+,24*3(a0)
  7881.  move.b (a2)+,24*4(a0)
  7882.  move.b (a2)+,24*5(a0)
  7883.  move.b (a2)+,24*6(a0)
  7884.  move.b (a2)+,24*7(a0)
  7885.  subq #1,a0
  7886.  swap d0
  7887.  ext.l d0
  7888.  dbra d2,digitlop3
  7889.  
  7890. dontshowtime:
  7891.  
  7892.  
  7893.  move.l alanptr,a0
  7894.  move.l (a0)+,alframe
  7895.  cmp.l #endalan,a0
  7896.  blt.s nostartalan
  7897.  move.l #alan,a0
  7898. nostartalan:
  7899.  move.l a0,alanptr
  7900.  
  7901.  
  7902.  tst.b READCONTROLS
  7903.  beq.s nocontrols
  7904.  
  7905.  cmp.b #'s',mors
  7906.  beq.s control2
  7907.  
  7908.  tst.b PLR1MOUSE
  7909.  beq.s PLR1_nomouse
  7910.  bsr PLR1_mouse_control
  7911. PLR1_nomouse:
  7912.  tst.b PLR1KEYS
  7913.  beq.s PLR1_nokeys
  7914.  bsr PLR1_keyboard_control
  7915. PLR1_nokeys:
  7916. ; tst.b PLR1PATH
  7917. ; beq.s PLR1_nopath
  7918. ; bsr PLR1_follow_path
  7919. ;PLR1_nopath:
  7920.  tst.b PLR1JOY
  7921.  beq.s PLR1_nojoy
  7922.  bsr PLR1_JoyStick_control
  7923. PLR1_nojoy: 
  7924.  bra.s nocontrols
  7925.  
  7926. control2:
  7927.  tst.b PLR2MOUSE
  7928.  beq.s PLR2_nomouse
  7929.  bsr PLR2_mouse_control
  7930. PLR2_nomouse:
  7931.  tst.b PLR2KEYS
  7932.  beq.s PLR2_nokeys
  7933.  bsr PLR2_keyboard_control
  7934. PLR2_nokeys:
  7935. ; tst.b PLR2PATH
  7936. ; beq.s PLR2_nopath
  7937. ; bsr PLR1_follow_path
  7938. ;PLR2_nopath:
  7939.  tst.b PLR2JOY
  7940.  beq.s PLR2_nojoy
  7941.  bsr PLR2_JoyStick_control
  7942. PLR2_nojoy: 
  7943.  
  7944.  
  7945. nocontrols:
  7946.  
  7947.  move.l #$dff000,a6
  7948.  
  7949.  cmp.b #'4',Prefsfile+1
  7950.  bne.s nomuckabout
  7951.  
  7952.  move.w #$0,d0 
  7953.  tst.b NoiseMade0LEFT
  7954.  beq.s noturnoff0
  7955.  move.w #1,d0
  7956. noturnoff0:
  7957.  tst.b NoiseMade0RIGHT
  7958.  beq.s noturnoff1
  7959.  or.w #2,d0
  7960. noturnoff1:
  7961.  tst.b NoiseMade1RIGHT
  7962.  beq.s noturnoff2
  7963.  or.w #4,d0
  7964. noturnoff2:
  7965.  tst.b NoiseMade1LEFT
  7966.  beq.s noturnoff3
  7967.  or.w #8,d0
  7968. noturnoff3:
  7969.     move.w d0,dmacon(a6)
  7970.  
  7971. nomuckabout:
  7972.  
  7973.  
  7974. ; tst.b PLR2_fire
  7975. ; beq.s firenotpressed2
  7976. ; fire was pressed last time.
  7977. ; btst #7,$bfe001
  7978. ; bne.s firenownotpressed2
  7979. ; fire is still pressed this time.
  7980. ; st PLR2_fire
  7981. ; bra dointer
  7982.  
  7983. firenownotpressed2:
  7984. ; fire has been released.
  7985. ; clr.b PLR2_fire
  7986. ; bra dointer
  7987.  
  7988. firenotpressed2
  7989.  
  7990. ; fire was not pressed last frame...
  7991.  
  7992. ; btst #7,$bfe001
  7993. ; if it has still not been pressed, go back above
  7994. ; bne.s firenownotpressed2
  7995. ; fire was not pressed last time, and was this time, so has
  7996. ; been clicked.
  7997. ; st PLR2_clicked
  7998. ; st PLR2_fire
  7999.  
  8000. dointer
  8001.  
  8002. JUSTSOUNDS:
  8003.  
  8004.  tst.b dosounds
  8005.  beq.s .notthing
  8006.  
  8007.  cmp.b #'4',Prefsfile+1
  8008.     beq fourchannel
  8009.  
  8010.  btst #1,$dff000+intreqr
  8011.     bne.s newsampbitl
  8012.  
  8013. .notthing:
  8014.  
  8015.  movem.l (a7)+,d0-d7/a0-a6
  8016.  
  8017.  moveq #0,d0
  8018.  rts
  8019.  
  8020.  
  8021. dosounds: dc.w 0
  8022.  
  8023. swappedem: dc.w 0
  8024.  
  8025. newsampbitl:
  8026.  
  8027.  move.w #$820f,$dff000+dmacon
  8028.  
  8029.  move.w #$200,$dff000+intreq
  8030.  
  8031. ; tst.b CHANNELDATA
  8032. ; bne nochannel0
  8033.  
  8034.  move.l pos0LEFT,a0
  8035.  move.l pos2LEFT,a1
  8036.  
  8037.  move.l #tab,a2
  8038.  
  8039.  moveq #0,d0
  8040.  moveq #0,d1
  8041.  move.b vol0left,d0
  8042.  move.b vol2left,d1
  8043.  cmp.b d1,d0
  8044.  slt swappedem
  8045.  bge.s fbig0
  8046.  
  8047. ; d1 is bigger so scale d0 and use d1
  8048. ; as audiochannel volume.
  8049.  
  8050.  exg a0,a1
  8051.  asl.w #6,d0
  8052.  divs d1,d0
  8053.  lsl.w #8,d0
  8054.  adda.w d0,a2
  8055.  move.w d1,$dff0a8
  8056.  bra.s donechan0
  8057.  
  8058. fbig0:
  8059.  tst.w d0
  8060.  beq.s donechan0
  8061.  asl.w #6,d1
  8062.  divs d0,d1
  8063.  lsl.w #8,d1
  8064.  adda.w d1,a2
  8065.  move.w d0,$dff0a8
  8066.  
  8067. donechan0:
  8068.  
  8069.  move.l Aupt0,a3
  8070.  move.l a3,$dff0a0
  8071.  move.l Auback0,Aupt0
  8072.  move.l a3,Auback0
  8073.  
  8074.  move.l Auback0,a3
  8075.  
  8076.  moveq #0,d0
  8077.  moveq #0,d1
  8078.  moveq #0,d2
  8079.  moveq #0,d3
  8080.  moveq #0,d4
  8081.  moveq #0,d5
  8082.  move.w #49,d7
  8083. loop:
  8084.  move.l (a0)+,d0
  8085.  move.b (a1)+,d1
  8086.  move.b (a1)+,d2
  8087.  move.b (a1)+,d3
  8088.  move.b (a1)+,d4
  8089.  move.b (a2,d3.w),d5
  8090.  swap d5
  8091.  move.b (a2,d1.w),d5
  8092.  asl.l #8,d5
  8093.  move.b (a2,d2.w),d5
  8094.  swap d5
  8095.  move.b (a2,d4.w),d5
  8096.  add.l d5,d0
  8097.  move.l d0,(a3)+
  8098.  dbra d7,loop
  8099.  
  8100.  tst.b swappedem
  8101.  beq.s .ok23
  8102.  exg a0,a1
  8103. .ok23:
  8104.  
  8105.  cmp.l Samp0endLEFT,a0
  8106.  blt.s .notoffendsamp1
  8107.  move.l #empty,a0
  8108.  move.l #emptyend,Samp0endLEFT
  8109.  move.b #0,vol0left
  8110.  st LEFTCHANDATA+1
  8111.  move.w #0,LEFTCHANDATA+2
  8112. .notoffendsamp1:
  8113.  
  8114.  cmp.l Samp2endLEFT,a1
  8115.  blt.s .notoffendsamp2
  8116.  move.l #empty,a1
  8117.  move.l #emptyend,Samp2endLEFT
  8118.  move.b #0,vol2left
  8119.  st LEFTCHANDATA+1+8
  8120.  move.w #0,LEFTCHANDATA+2+8
  8121. .notoffendsamp2:
  8122.  
  8123.  move.l a0,pos0LEFT
  8124.  move.l a1,pos2LEFT
  8125.  
  8126. nochannel0:
  8127.  
  8128.  tst.b CHANNELDATA+16
  8129.  bne nochannel1
  8130.  
  8131.  
  8132.  move.l pos0RIGHT,a0
  8133.  move.l pos2RIGHT,a1
  8134.  
  8135.  move.l Aupt1,a3
  8136.  move.l a3,$dff0b0
  8137.  move.l Auback1,Aupt1
  8138.  move.l a3,Auback1
  8139.  
  8140.  move.l #tab,a2
  8141.  
  8142.  moveq #0,d0
  8143.  moveq #0,d1
  8144.  move.b vol0right,d0
  8145.  move.b vol2right,d1
  8146.  cmp.b d1,d0
  8147.  slt swappedem
  8148.  bge.s fbig1
  8149.  
  8150. ; d1 is bigger so scale d0 and use d1
  8151. ; as audiochannel volume.
  8152.  
  8153.  exg a0,a1
  8154.  asl.w #6,d0
  8155.  divs d1,d0
  8156.  lsl.w #8,d0
  8157.  adda.w d0,a2
  8158.  move.w d1,$dff0b8
  8159.  bra.s donechan1
  8160.  
  8161. fbig1:
  8162.  tst.w d0
  8163.  beq.s donechan1
  8164.  asl.w #6,d1
  8165.  divs d0,d1
  8166.  lsl.w #8,d1
  8167.  adda.w d1,a2
  8168.  move.w d0,$dff0b8
  8169.  
  8170. donechan1:
  8171.  moveq #0,d0
  8172.  moveq #0,d1
  8173.  moveq #0,d2
  8174.  moveq #0,d3
  8175.  moveq #0,d4
  8176.  moveq #0,d5
  8177.  move.w #49,d7
  8178. loop2:
  8179.  move.l (a0)+,d0
  8180.  move.b (a1)+,d1
  8181.  move.b (a1)+,d2
  8182.  move.b (a1)+,d3
  8183.  move.b (a1)+,d4
  8184.  move.b (a2,d3.w),d5
  8185.  swap d5
  8186.  move.b (a2,d1.w),d5
  8187.  asl.l #8,d5
  8188.  move.b (a2,d2.w),d5
  8189.  swap d5
  8190.  move.b (a2,d4.w),d5
  8191.  add.l d5,d0
  8192.  move.l d0,(a3)+
  8193.  dbra d7,loop2
  8194.  
  8195.  tst.b swappedem
  8196.  beq.s ok01
  8197.  exg a0,a1
  8198. ok01:
  8199.  
  8200.  cmp.l Samp0endRIGHT,a0
  8201.  blt.s .notoffendsamp1
  8202.  move.l #empty,a0
  8203.  move.l #emptyend,Samp0endRIGHT
  8204.  move.b #0,vol0right
  8205.  st RIGHTCHANDATA+1
  8206.  move.w #0,RIGHTCHANDATA+2
  8207. .notoffendsamp1:
  8208.  
  8209.  cmp.l Samp2endRIGHT,a1
  8210.  blt.s .notoffendsamp2
  8211.  move.l #empty,a1
  8212.  move.l #emptyend,Samp2endRIGHT
  8213.  move.b #0,vol2right
  8214.  st RIGHTCHANDATA+1+8
  8215.  move.w #0,RIGHTCHANDATA+2+8
  8216. .notoffendsamp2:
  8217.  
  8218.  move.l a0,pos0RIGHT
  8219.  move.l a1,pos2RIGHT
  8220.  
  8221. nochannel1:
  8222.  
  8223. ******************* Other two channels
  8224.  
  8225.  move.l pos1LEFT,a0
  8226.  move.l pos3LEFT,a1
  8227.  
  8228.  move.l #tab,a2
  8229.  
  8230.  moveq #0,d0
  8231.  moveq #0,d1
  8232.  move.b vol1left,d0
  8233.  move.b vol3left,d1
  8234.  cmp.b d1,d0
  8235.  slt swappedem
  8236.  bge.s fbig2
  8237.  
  8238. ; d1 is bigger so scale d0 and use d1
  8239. ; as audiochannel volume.
  8240.  
  8241.  exg a0,a1
  8242.  asl.w #6,d0
  8243.  divs d1,d0
  8244.  lsl.w #8,d0
  8245.  adda.w d0,a2
  8246.  move.w d1,$dff0d8
  8247.  bra.s donechan2
  8248.  
  8249. fbig2:
  8250.  tst.w d0
  8251.  beq.s donechan2
  8252.  asl.w #6,d1
  8253.  divs d0,d1
  8254.  lsl.w #8,d1
  8255.  adda.w d1,a2
  8256.  move.w d0,$dff0d8
  8257.  
  8258. donechan2:
  8259.  
  8260.  move.l Aupt2,a3
  8261.  move.l a3,$dff0d0
  8262.  move.l Auback2,Aupt2
  8263.  move.l a3,Auback2
  8264.  
  8265.  moveq #0,d0
  8266.  moveq #0,d1
  8267.  moveq #0,d2
  8268.  moveq #0,d3
  8269.  moveq #0,d4
  8270.  moveq #0,d5
  8271.  move.w #49,d7
  8272. loop3:
  8273.  move.l (a0)+,d0
  8274.  move.b (a1)+,d1
  8275.  move.b (a1)+,d2
  8276.  move.b (a1)+,d3
  8277.  move.b (a1)+,d4
  8278.  move.b (a2,d3.w),d5
  8279.  swap d5
  8280.  move.b (a2,d1.w),d5
  8281.  asl.l #8,d5
  8282.  move.b (a2,d2.w),d5
  8283.  swap d5
  8284.  move.b (a2,d4.w),d5
  8285.  add.l d5,d0
  8286.  move.l d0,(a3)+
  8287.  dbra d7,loop3
  8288.  
  8289.  tst.b swappedem
  8290.  beq.s .ok23
  8291.  exg a0,a1
  8292. .ok23:
  8293.  
  8294.  cmp.l Samp1endLEFT,a0
  8295.  blt.s .notoffendsamp3
  8296.  move.l #empty,a0
  8297.  move.l #emptyend,Samp1endLEFT
  8298.  move.b #0,vol1left
  8299.  st LEFTCHANDATA+1+4
  8300.  move.w #0,LEFTCHANDATA+2+4
  8301. .notoffendsamp3:
  8302.  
  8303.  cmp.l Samp3endLEFT,a1
  8304.  blt.s .notoffendsamp4
  8305.  move.l #empty,a1
  8306.  move.l #emptyend,Samp3endLEFT
  8307.  move.b #0,vol3left
  8308.  st LEFTCHANDATA+1+12
  8309.  move.w #0,LEFTCHANDATA+2+12
  8310. .notoffendsamp4:
  8311.  
  8312.  move.l a0,pos1LEFT
  8313.  move.l a1,pos3LEFT
  8314.  
  8315.  move.l pos1RIGHT,a0
  8316.  move.l pos3RIGHT,a1
  8317.  
  8318.  move.l Aupt3,a3
  8319.  move.l a3,$dff0c0
  8320.  move.l Auback3,Aupt3
  8321.  move.l a3,Auback3
  8322.  
  8323.  move.l #tab,a2
  8324.  
  8325.  moveq #0,d0
  8326.  moveq #0,d1
  8327.  move.b vol1right,d0
  8328.  move.b vol3right,d1
  8329.  cmp.b d1,d0
  8330.  slt.s swappedem
  8331.  bge.s fbig3
  8332.  
  8333.  exg a0,a1
  8334.  asl.w #6,d0
  8335.  divs d1,d0
  8336.  lsl.w #8,d0
  8337.  adda.w d0,a2
  8338.  move.w d1,$dff0c8
  8339.  bra.s donechan3
  8340.  
  8341. fbig3:
  8342.  tst.w d0
  8343.  beq.s donechan3
  8344.  asl.w #6,d1
  8345.  divs d0,d1
  8346.  lsl.w #8,d1
  8347.  adda.w d1,a2
  8348.  move.w d0,$dff0c8
  8349. donechan3:
  8350.  
  8351.  moveq #0,d0
  8352.  moveq #0,d1
  8353.  moveq #0,d2
  8354.  moveq #0,d3
  8355.  moveq #0,d4
  8356.  moveq #0,d5
  8357.  move.w #49,d7
  8358. loop4:
  8359.  move.l (a0)+,d0
  8360.  move.b (a1)+,d1
  8361.  move.b (a1)+,d2
  8362.  move.b (a1)+,d3
  8363.  move.b (a1)+,d4
  8364.  move.b (a2,d3.w),d5
  8365.  swap d5
  8366.  move.b (a2,d1.w),d5
  8367.  asl.l #8,d5
  8368.  move.b (a2,d2.w),d5
  8369.  swap d5
  8370.  move.b (a2,d4.w),d5
  8371.  add.l d5,d0
  8372.  move.l d0,(a3)+
  8373.  dbra d7,loop4
  8374.  
  8375.  tst.b swappedem
  8376.  beq.s .ok23
  8377.  exg a0,a1
  8378. .ok23:
  8379.  
  8380.  cmp.l Samp1endRIGHT,a0
  8381.  blt.s notoffendsamp3
  8382.  move.l #empty,a0
  8383.  move.l #emptyend,Samp1endRIGHT
  8384.  move.b #0,vol1right
  8385.  st RIGHTCHANDATA+1+4
  8386.  move.w #0,RIGHTCHANDATA+2+4
  8387. notoffendsamp3:
  8388.  
  8389.  cmp.l Samp3endRIGHT,a1
  8390.  blt.s notoffendsamp4
  8391.  move.l #empty,a1
  8392.  move.l #emptyend,Samp3endRIGHT
  8393.  move.b #0,vol3right
  8394.  st RIGHTCHANDATA+1+12
  8395.  move.w #0,RIGHTCHANDATA+2+12
  8396. notoffendsamp4:
  8397.  
  8398.  move.l a0,pos1RIGHT
  8399.  move.l a1,pos3RIGHT
  8400.  
  8401.  movem.l (a7)+,d0-d7/a0-a6
  8402.  tst.b counting
  8403.  beq .nostartcounter
  8404.  JSR STARTCOUNT
  8405. .nostartcounter:
  8406.  
  8407.  moveq #0,d0
  8408.  rts
  8409.  
  8410. ***********************************
  8411. * 4 channel sound routine
  8412. ***********************************
  8413.  
  8414. fourchannel:
  8415.  
  8416.  move.l #$dff000,a6
  8417.  
  8418.  btst #7,intreqrl(a6)
  8419.  beq.s nofinish0
  8420. ; move.w #0,LEFTCHANDATA+2
  8421. ; st LEFTCHANDATA+1
  8422.  move.l #null,$a0(a6)
  8423.  move.w #100,$a4(a6) 
  8424.  move.w #$0080,intreq(a6)
  8425. nofinish0:
  8426.  
  8427.  tst.b NoiseMade0pLEFT
  8428.  beq.s NoChan0sound
  8429.  
  8430.  move.l Samp0endLEFT,d0
  8431.  move.l pos0LEFT,d1
  8432.  sub.l d1,d0
  8433.  lsr.l #1,d0
  8434.  move.w d0,$a4(a6)
  8435.  move.l d1,$a0(a6)
  8436.  move.w #$8201,dmacon(a6)
  8437.  moveq #0,d0
  8438.  move.b vol0left,d0
  8439.  move.w d0,$a8(a6)
  8440.  
  8441. NoChan0sound:
  8442.  
  8443. *****************************************
  8444. *****************************************
  8445.  
  8446.  btst #0,intreqr(a6)
  8447.  beq.s nofinish1
  8448.  move.l #null,$b0(a6)
  8449.  move.w #100,$b4(a6)
  8450.  move.w #$0100,intreq(a6)
  8451. nofinish1:
  8452.  
  8453.  tst.b NoiseMade0pRIGHT
  8454.  beq.s NoChan1sound
  8455.  
  8456.  move.l Samp0endRIGHT,d0
  8457.  move.l pos0RIGHT,d1
  8458.  sub.l d1,d0
  8459.  lsr.l #1,d0
  8460.  move.w d0,$b4(a6)
  8461.  move.l d1,$b0(a6)
  8462.  move.w d0,playnull1
  8463.  move.w #$8202,dmacon(a6)
  8464.  moveq #0,d0
  8465.  move.b vol0right,d0
  8466.  move.w d0,$b8(a6)
  8467.  
  8468. NoChan1sound:
  8469.  
  8470. *****************************************
  8471. *****************************************
  8472.  
  8473.  btst #1,intreqr(a6)
  8474.  beq.s nofinish2
  8475.  move.l #null,$c0(a6)
  8476.  move.w #100,$c4(a6)
  8477.  move.w #$0200,intreq(a6)
  8478. nofinish2:
  8479.  
  8480.  tst.b NoiseMade1pRIGHT
  8481.  beq.s NoChan2sound
  8482.  
  8483.  move.l Samp1endRIGHT,d0
  8484.  move.l pos1RIGHT,d1
  8485.  sub.l d1,d0
  8486.  lsr.l #1,d0
  8487.  move.w d0,$c4(a6)
  8488.  move.w d0,playnull2
  8489.  
  8490.  move.l d1,$c0(a6)
  8491.  move.w #$8204,dmacon(a6)
  8492.  moveq #0,d0
  8493.  move.b vol1right,d0
  8494.  move.w d0,$c8(a6)
  8495.  
  8496. NoChan2sound:
  8497.  
  8498. *****************************************
  8499. *****************************************
  8500.  
  8501.  btst #2,intreqr(a6)
  8502.  beq.s nofinish3
  8503.  move.l #null,$d0(a6)
  8504.  move.w #100,$d4(a6)
  8505.  move.w #$0400,intreq(a6)
  8506. nofinish3:
  8507.  
  8508.  tst.b NoiseMade1pLEFT
  8509.  beq.s NoChan3sound
  8510.  
  8511.  move.l Samp1endLEFT,d0
  8512.  move.l pos1LEFT,d1
  8513.  sub.l d1,d0
  8514.  lsr.l #1,d0
  8515.  move.w d0,$d4(a6)
  8516.  move.w d0,playnull3
  8517.  move.l d1,$d0(a6)
  8518.  move.w #$8208,dmacon(a6)
  8519.  moveq #0,d0
  8520.  move.b vol1left,d0
  8521.  move.w d0,$d8(a6)
  8522.  
  8523. NoChan3sound:
  8524.  
  8525. nomorechannels:
  8526.  
  8527.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  8528.  move.l #0,NoiseMade0LEFT
  8529.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  8530.  move.l #0,NoiseMade0RIGHT
  8531.  
  8532. ; tst.b playnull0
  8533. ; beq.s .nnul
  8534. ; sub.b #1,playnull0
  8535. ; bra.s chan0still
  8536. ;.nnul:
  8537. ;chan0still:
  8538.  
  8539.  tst.b NoiseMade0pLEFT
  8540.  bne.s chan0still
  8541.  tst.w playnull0
  8542.  beq.s nnul0
  8543.  sub.w #100,playnull0
  8544.  bra.s chan0still
  8545. nnul0:
  8546.  move.w #0,LEFTCHANDATA+2
  8547.  st LEFTCHANDATA+1
  8548. chan0still:
  8549.  
  8550.  tst.b NoiseMade0pRIGHT
  8551.  bne.s chan1still
  8552.  tst.w playnull1
  8553.  beq.s nnul1
  8554.  sub.w #100,playnull1
  8555.  bra.s chan1still
  8556. nnul1:
  8557.  move.w #0,RIGHTCHANDATA+2
  8558.  st RIGHTCHANDATA+1
  8559. chan1still:
  8560.  
  8561.  tst.b NoiseMade1pRIGHT
  8562.  bne.s chan2still
  8563.  tst.w playnull2
  8564.  beq.s nnul2
  8565.  sub.w #100,playnull2
  8566.  bra.s chan2still
  8567. nnul2:
  8568.  move.w #0,RIGHTCHANDATA+2+4
  8569.  st RIGHTCHANDATA+1+4
  8570. chan2still:
  8571.  
  8572.  tst.b NoiseMade1pLEFT
  8573.  bne.s chan3still
  8574.  tst.w playnull3
  8575.  beq.s nnul3
  8576.  sub.w #100,playnull3
  8577.  bra.s chan3still
  8578. nnul3:
  8579.  move.w #0,LEFTCHANDATA+2+4
  8580.  st LEFTCHANDATA+1+4
  8581.  
  8582. chan3still:
  8583.  
  8584.  
  8585.  movem.l (a7)+,d0-d7/a0-a6
  8586.  
  8587.  moveq #0,d0
  8588.  rts
  8589.  
  8590. backbeat: dc.w 0
  8591.  
  8592. playnull0: dc.w 0
  8593. playnull1: dc.w 0
  8594. playnull2: dc.w 0
  8595. playnull3: dc.w 0
  8596.  
  8597. Samp0endRIGHT: dc.l emptyend
  8598. Samp1endRIGHT: dc.l emptyend
  8599. Samp2endRIGHT: dc.l emptyend
  8600. Samp3endRIGHT: dc.l emptyend
  8601. Samp0endLEFT: dc.l emptyend
  8602. Samp1endLEFT: dc.l emptyend
  8603. Samp2endLEFT: dc.l emptyend
  8604. Samp3endLEFT: dc.l emptyend
  8605.  
  8606. Aupt0: dc.l null
  8607. Auback0: dc.l null+500
  8608. Aupt2: dc.l null3
  8609. Auback2: dc.l null3+500
  8610. Aupt3: dc.l null4
  8611. Auback3: dc.l null4+500
  8612. Aupt1: dc.l null2
  8613. Auback1: dc.l null2+500
  8614.  
  8615. NoiseMade0LEFT: dc.b 0
  8616. NoiseMade1LEFT: dc.b 0
  8617. NoiseMade2LEFT: dc.b 0
  8618. NoiseMade3LEFT: dc.b 0
  8619. NoiseMade0pLEFT: dc.b 0
  8620. NoiseMade1pLEFT: dc.b 0
  8621. NoiseMade2pLEFT: dc.b 0
  8622. NoiseMade3pLEFT: dc.b 0
  8623. NoiseMade0RIGHT: dc.b 0
  8624. NoiseMade1RIGHT: dc.b 0
  8625. NoiseMade2RIGHT: dc.b 0
  8626. NoiseMade3RIGHT: dc.b 0
  8627. NoiseMade0pRIGHT: dc.b 0
  8628. NoiseMade1pRIGHT: dc.b 0
  8629. NoiseMade2pRIGHT: dc.b 0
  8630. NoiseMade3pRIGHT: dc.b 0
  8631.  
  8632. empty: ds.l 100
  8633. emptyend:
  8634.  
  8635. **************************************
  8636. * I want a routine to calculate all the
  8637. * info needed for the sound player to
  8638. * work, given say position of noise, volume
  8639. * and sample number.
  8640.  
  8641. Samplenum: dc.w 0
  8642. Noisex: dc.w 0
  8643. Noisez: dc.w 0
  8644. Noisevol: dc.w 0
  8645. chanpick: dc.w 0
  8646. IDNUM: dc.w 0
  8647. needleft: dc.b 0
  8648. needright: dc.b 0
  8649. STEREO: dc.b $0
  8650. even
  8651. prot6: dc.w 0
  8652.  
  8653.  even
  8654.  
  8655. CHANNELDATA:
  8656. LEFTCHANDATA:
  8657.  dc.l $00000000
  8658.  dc.l $00000000
  8659.  dc.l $FF000000
  8660.  dc.l $FF000000
  8661. RIGHTCHANDATA:
  8662.  dc.l $00000000
  8663.  dc.l $00000000
  8664.  dc.l $FF000000
  8665.  dc.l $FF000000
  8666.  
  8667. RIGHTPLAYEDTAB: ds.l 20
  8668. LEFTPLAYEDTAB: ds.l 20
  8669.  
  8670. MakeSomeNoise:
  8671.  
  8672. ; Plan for new sound handler:
  8673. ; It is sent a sample number,
  8674. ; a position relative to the
  8675. ; player, an id number and a volume.
  8676. ; Also notifplaying.
  8677.  
  8678. ; indirect inputs are the available
  8679. ; channel flags and whether or not
  8680. ; stereo sound is selected.
  8681.  
  8682. ; the algorithm must decide
  8683. ; whether the new sound is more
  8684. ; important than the ones already
  8685. ; playing. Thus an 'importance'
  8686. ; must be calculated, probably
  8687. ; using volume.
  8688.  
  8689. ; The output needs to be:
  8690.  
  8691. ; Write the pointers and volumes of
  8692. ; the sound channels
  8693.  
  8694.  
  8695.  tst.b notifplaying
  8696.  beq.s dontworry
  8697.  
  8698. ; find if we are already playing
  8699.  
  8700.  move.b IDNUM,d0
  8701.  move.w #7,d1
  8702.  lea CHANNELDATA,a3
  8703. findsameasme
  8704.  tst.b (a3)
  8705.  bne.s notavail
  8706.  cmp.b 1(a3),d0
  8707.  beq SameAsMe
  8708. notavail:
  8709.  add.w #4,a3
  8710.  dbra d1,findsameasme
  8711.  bra dontworry
  8712. SameAsMe
  8713.  rts
  8714.  
  8715. noiseloud: dc.w 0
  8716.  
  8717. dontworry:
  8718.  
  8719. ; Ok its fine for us to play a sound.
  8720. ; So calculate left/right volume.
  8721.  
  8722.  move.w Noisex,d1
  8723.  muls d1,d1
  8724.  move.w Noisez,d2
  8725.  muls d2,d2
  8726.  move.w #64,d3
  8727.  move.w #32767,noiseloud
  8728.  moveq #1,d0
  8729.  add.l d1,d2
  8730.  beq pastcalc
  8731.  
  8732.  move.w #31,d0
  8733. .findhigh
  8734.  btst d0,d2
  8735.  bne .foundhigh
  8736.  dbra d0,.findhigh
  8737. .foundhigh
  8738.  asr.w #1,d0
  8739.  clr.l d3
  8740.  bset d0,d3
  8741.  move.l d3,d0
  8742.  
  8743.  move.w d0,d3
  8744.  muls d3,d3    ; x*x
  8745.  sub.l d2,d3    ; x*x-a
  8746.  asr.l #1,d3    ; (x*x-a)/2
  8747.  divs d0,d3    ; (x*x-a)/2x
  8748.  sub.w d3,d0    ; second approx
  8749.  bgt .stillnot0
  8750.  move.w #1,d0
  8751. .stillnot0
  8752.  
  8753.  move.w d0,d3
  8754.  muls d3,d3
  8755.  sub.l d2,d3
  8756.  asr.l #1,d3
  8757.  divs d0,d3
  8758.  sub.w d3,d0    ; second approx
  8759.  bgt .stillnot02
  8760.  move.w #1,d0
  8761. .stillnot02
  8762.  
  8763.  move.w Noisevol,d3
  8764.  ext.l d3
  8765.  asl.l #6,d3
  8766.  cmp.l #32767,d3
  8767.  ble.s .nnnn
  8768.  move.l #32767,d3
  8769. .nnnn
  8770.  
  8771.  asr.w #2,d0
  8772.  addq #1,d0
  8773.  divs d0,d3
  8774.  
  8775.  move.w d3,noiseloud
  8776.  
  8777.  cmp.w #64,d3
  8778.  ble.s notooloud
  8779.  move.w #64,d3
  8780. notooloud:
  8781.  
  8782. pastcalc:
  8783.  
  8784.     ; d3 contains volume of noise.
  8785.     
  8786.  move.w d3,d4
  8787.  tst.b STEREO
  8788.  beq NOSTEREO
  8789.  
  8790.  move.w d3,d2
  8791.  muls Noisex,d2
  8792.  asl.w #2,d0
  8793.  divs d0,d2
  8794.  
  8795.  bgt.s quietleft
  8796.  add.w d2,d4
  8797.  bge.s donequiet
  8798.  move.w #0,d4
  8799.  bra.s donequiet
  8800. quietleft:
  8801.  sub.w d2,d3
  8802.  bge.s donequiet
  8803.  move.w #0,d3
  8804. donequiet:
  8805.  
  8806. ; d3=leftvol?
  8807. ; d4=rightvol?
  8808.  
  8809.  clr.w needleft
  8810.  
  8811.  cmp.b d3,d4
  8812.  bgt.s RightLouder
  8813.  
  8814. ; Left is louder; is it MUCH louder?
  8815.  
  8816.  st needleft
  8817.  move.w d3,d2
  8818.  sub.w d4,d2
  8819.  cmp.w #32,d2
  8820.  slt needright
  8821.  bra aboutsame
  8822.  
  8823. RightLouder:
  8824.  st needright
  8825.  move.w d4,d2
  8826.  sub.w d3,d2
  8827.  cmp.w #32,d2
  8828.  slt needleft
  8829.  
  8830. aboutsame:
  8831.  
  8832.  
  8833. ; Find least important sound on left
  8834.  
  8835.  move.l #0,a2
  8836.  move.l #0,d5
  8837.  move.w #32767,d2
  8838.  move.b IDNUM,d0
  8839.  lea LEFTCHANDATA,a3
  8840.  move.w #3,d1
  8841. FindLeftChannel
  8842.  tst.b (a3)
  8843.  bne.s .notactive
  8844.  cmp.b 1(a3),d0
  8845.  beq.s FOUNDLEFT
  8846.  cmp.w 2(a3),d2
  8847.  blt.s .notactive
  8848.  move.w 2(a3),d2
  8849.  move.l a3,a2
  8850.  move.w d5,d6
  8851.  
  8852. .notactive:
  8853.  add.w #4,a3
  8854.  add.w #1,d5
  8855.  dbra d1,FindLeftChannel
  8856.  move.l a2,a3
  8857.  bra.s gopastleft
  8858. FOUNDLEFT:
  8859.  move.w d5,d6
  8860. gopastleft:
  8861.  tst.l a3
  8862.  bne.s FOUNDALEFT
  8863.  rts
  8864. FOUNDALEFT:
  8865.  
  8866. ; d6 = channel number
  8867.  move.b d0,1(a3)
  8868.  move.w d3,2(a3)
  8869.  
  8870.  move.w Samplenum,d5
  8871.  move.l #SampleList,a3
  8872.  move.l (a3,d5.w*8),a1
  8873.  move.l 4(a3,d5.w*8),a2
  8874.  
  8875.  tst.b d6
  8876.  seq NoiseMade0LEFT
  8877.  beq.s .chan0
  8878.  cmp.b #2,d6
  8879.  slt NoiseMade1LEFT
  8880.  blt .chan1
  8881.  seq NoiseMade2LEFT
  8882.  beq .chan2
  8883.  st NoiseMade3LEFT
  8884.  
  8885.  move.b d5,LEFTPLAYEDTAB+9
  8886.  move.b d3,LEFTPLAYEDTAB+1+9
  8887.  move.b d4,LEFTPLAYEDTAB+2+9
  8888.  move.b d3,vol3left
  8889.  move.l a1,pos3LEFT
  8890.  move.l a2,Samp3endLEFT
  8891.  bra dorightchan
  8892.  
  8893. .chan0: 
  8894.  move.b d5,LEFTPLAYEDTAB
  8895.  move.b d3,LEFTPLAYEDTAB+1
  8896.  move.b d4,LEFTPLAYEDTAB+2
  8897.  move.l a1,pos0LEFT
  8898.  move.l a2,Samp0endLEFT
  8899.  move.b d3,vol0left
  8900.  bra dorightchan
  8901.  
  8902. .chan1:
  8903.  move.b d5,LEFTPLAYEDTAB+3
  8904.  move.b d3,LEFTPLAYEDTAB+1+3
  8905.  move.b d4,LEFTPLAYEDTAB+2+3
  8906.  move.b d3,vol1left
  8907.  move.l a1,pos1LEFT
  8908.  move.l a2,Samp1endLEFT
  8909.  bra dorightchan
  8910.  
  8911. .chan2: 
  8912.  move.b d5,LEFTPLAYEDTAB+6
  8913.  move.b d3,LEFTPLAYEDTAB+1+6
  8914.  move.b d4,LEFTPLAYEDTAB+2+6
  8915.  move.l a1,pos2LEFT
  8916.  move.l a2,Samp2endLEFT
  8917.  move.b d3,vol2left
  8918.  
  8919. dorightchan:
  8920.  
  8921. ; Find least important sound on right
  8922.  
  8923.  move.l #0,a2
  8924.  move.l #0,d5
  8925.  move.w #10000,d2
  8926.  move.b IDNUM,d0
  8927.  lea RIGHTCHANDATA,a3
  8928.  move.w #3,d1
  8929. FindRightChannel
  8930.  tst.b (a3)
  8931.  bne.s .notactive
  8932.  cmp.b 1(a3),d0
  8933.  beq.s FOUNDRIGHT
  8934.  cmp.w 2(a3),d2
  8935.  blt.s .notactive
  8936.  move.w 2(a3),d2
  8937.  move.l a3,a2
  8938.  move.w d5,d6
  8939.  
  8940. .notactive:
  8941.  add.w #4,a3
  8942.  add.w #1,d5
  8943.  dbra d1,FindRightChannel
  8944.  move.l a2,a3
  8945.  bra.s gopastright
  8946. FOUNDRIGHT:
  8947.  move.w d5,d6
  8948. gopastright:
  8949.  tst.l a3
  8950.  bne.s FOUNDARIGHT
  8951.  rts
  8952. FOUNDARIGHT:
  8953.  
  8954. ; d6 = channel number
  8955.  move.b d0,1(a3)
  8956.  move.w d3,2(a3)
  8957.  
  8958.  move.w Samplenum,d5
  8959.  move.l #SampleList,a3
  8960.  move.l (a3,d5.w*8),a1
  8961.  move.l 4(a3,d5.w*8),a2
  8962.  
  8963.  tst.b d6
  8964.  seq NoiseMade0RIGHT
  8965.  beq.s .chan0
  8966.  cmp.b #2,d6
  8967.  slt NoiseMade1RIGHT
  8968.  blt .chan1
  8969.  seq NoiseMade2RIGHT
  8970.  beq .chan2
  8971.  st NoiseMade3RIGHT
  8972.  
  8973.  move.b d5,RIGHTPLAYEDTAB+9
  8974.  move.b d3,RIGHTPLAYEDTAB+1+9
  8975.  move.b d4,RIGHTPLAYEDTAB+2+9
  8976.  move.b d4,vol3right
  8977.  move.l a1,pos3RIGHT
  8978.  move.l a2,Samp3endRIGHT
  8979.  rts
  8980.  
  8981. .chan0: 
  8982.  move.b d5,RIGHTPLAYEDTAB
  8983.  move.b d3,RIGHTPLAYEDTAB+1
  8984.  move.b d4,RIGHTPLAYEDTAB+2
  8985.  move.l a1,pos0RIGHT
  8986.  move.l a2,Samp0endRIGHT
  8987.  move.b d4,vol0right
  8988.  rts
  8989.  
  8990. .chan1:
  8991.  move.b d5,RIGHTPLAYEDTAB+3
  8992.  move.b d3,RIGHTPLAYEDTAB+1+3
  8993.  move.b d4,RIGHTPLAYEDTAB+2+3
  8994.  move.b d3,vol1right
  8995.  move.l a1,pos1RIGHT
  8996.  move.l a2,Samp1endRIGHT
  8997.  rts
  8998.  
  8999. .chan2: 
  9000.  move.b d5,RIGHTPLAYEDTAB+6
  9001.  move.b d3,RIGHTPLAYEDTAB+1+6
  9002.  move.b d4,RIGHTPLAYEDTAB+2+6
  9003.  move.l a1,pos2RIGHT
  9004.  move.l a2,Samp2endRIGHT
  9005.  move.b d3,vol2right
  9006.  rts
  9007.  
  9008. NOSTEREO:
  9009.  move.l #0,a2
  9010.  move.l #-1,d5
  9011.  move.w #32767,d2
  9012.  move.b IDNUM,d0
  9013.  lea CHANNELDATA,a3
  9014.  move.w #7,d1
  9015. FindChannel
  9016.  tst.b (a3)
  9017.  bne.s .notactive
  9018.  cmp.b 1(a3),d0
  9019.  beq.s FOUNDCHAN
  9020.  cmp.w 2(a3),d2
  9021.  blt.s .notactive
  9022.  move.w 2(a3),d2
  9023.  move.l a3,a2
  9024.  move.w d5,d6
  9025.  add.w #1,d6
  9026.  
  9027. .notactive:
  9028.  add.w #4,a3
  9029.  add.w #1,d5
  9030.  dbra d1,FindChannel
  9031.  
  9032.  move.l a2,a3
  9033.  bra.s gopastchan
  9034. FOUNDCHAN:
  9035.  move.w d5,d6
  9036.  add.w #1,d6
  9037. gopastchan:
  9038.  tst.w d6
  9039.  bge.s FOUNDACHAN
  9040. tooquiet:
  9041.  rts
  9042. FOUNDACHAN:
  9043.  
  9044. ; d6 = channel number
  9045.  
  9046.  cmp.w noiseloud,d2
  9047.  bgt.s tooquiet
  9048.  
  9049.  move.b d0,1(a3)
  9050.  move.w noiseloud,2(a3)
  9051.  
  9052.  move.w Samplenum,d5
  9053.  move.l #SampleList,a3
  9054.  move.l (a3,d5.w*8),a1
  9055.  move.l 4(a3,d5.w*8),a2
  9056.  
  9057.  tst.b d6
  9058.  beq .chan0
  9059.  cmp.b #2,d6
  9060.  blt .chan1
  9061.  beq .chan2
  9062.  cmp.b #4,d6
  9063.  blt .chan3
  9064.  beq .chan4
  9065.  cmp.b #6,d6
  9066.  blt .chan5
  9067.  beq .chan6
  9068.  st NoiseMade3RIGHT
  9069.  
  9070.  move.b d5,RIGHTPLAYEDTAB+9
  9071.  move.b d3,RIGHTPLAYEDTAB+1+9
  9072.  move.b d4,RIGHTPLAYEDTAB+2+9
  9073.  move.b d4,vol3right
  9074.  move.l a1,pos3RIGHT
  9075.  move.l a2,Samp3endRIGHT
  9076.  rts
  9077.  
  9078. .chan3:
  9079.  st NoiseMade3LEFT
  9080.  move.b d5,LEFTPLAYEDTAB+9
  9081.  move.b d3,LEFTPLAYEDTAB+1+9
  9082.  move.b d4,LEFTPLAYEDTAB+2+9
  9083.  move.b d3,vol3left
  9084.  move.l a1,pos3LEFT
  9085.  move.l a2,Samp3endLEFT
  9086.  bra dorightchan
  9087.  
  9088. .chan0: 
  9089.  st NoiseMade0LEFT
  9090.  move.b d5,LEFTPLAYEDTAB
  9091.  move.b d3,LEFTPLAYEDTAB+1
  9092.  move.b d4,LEFTPLAYEDTAB+2
  9093.  move.l a1,pos0LEFT
  9094.  move.l a2,Samp0endLEFT
  9095.  move.b d3,vol0left
  9096.  rts
  9097.  
  9098. .chan1:
  9099.  st NoiseMade1LEFT
  9100.  move.b d5,LEFTPLAYEDTAB+3
  9101.  move.b d3,LEFTPLAYEDTAB+1+3
  9102.  move.b d4,LEFTPLAYEDTAB+2+3
  9103.  move.b d3,vol1left
  9104.  move.l a1,pos1LEFT
  9105.  move.l a2,Samp1endLEFT
  9106.  rts
  9107.  
  9108. .chan2: 
  9109.  st NoiseMade2LEFT
  9110.  move.b d5,LEFTPLAYEDTAB+6
  9111.  move.b d3,LEFTPLAYEDTAB+1+6
  9112.  move.b d4,LEFTPLAYEDTAB+2+6
  9113.  move.l a1,pos2LEFT
  9114.  move.l a2,Samp2endLEFT
  9115.  move.b d3,vol2left
  9116.  rts
  9117.  
  9118. .chan4: 
  9119.  st NoiseMade0RIGHT
  9120.  move.b d5,RIGHTPLAYEDTAB
  9121.  move.b d3,RIGHTPLAYEDTAB+1
  9122.  move.b d4,RIGHTPLAYEDTAB+2
  9123.  move.l a1,pos0RIGHT
  9124.  move.l a2,Samp0endRIGHT
  9125.  move.b d4,vol0right
  9126.  rts
  9127.  
  9128. .chan5:
  9129.  st NoiseMade1RIGHT
  9130.  move.b d5,RIGHTPLAYEDTAB+3
  9131.  move.b d3,RIGHTPLAYEDTAB+1+3
  9132.  move.b d4,RIGHTPLAYEDTAB+2+3
  9133.  move.b d3,vol1right
  9134.  move.l a1,pos1RIGHT
  9135.  move.l a2,Samp1endRIGHT
  9136.  rts
  9137.  
  9138. .chan6: 
  9139.  st NoiseMade2RIGHT
  9140.  move.b d5,RIGHTPLAYEDTAB+6
  9141.  move.b d3,RIGHTPLAYEDTAB+1+6
  9142.  move.b d4,RIGHTPLAYEDTAB+2+6
  9143.  move.l a1,pos2RIGHT
  9144.  move.l a2,Samp2endRIGHT
  9145.  move.b d3,vol2right
  9146.  rts
  9147.  
  9148. SampleList:
  9149.  dc.l Scream,EndScream
  9150.  dc.l Shoot,EndShoot
  9151.  dc.l Munch,EndMunch
  9152.  dc.l PooGun,EndPooGun
  9153.  dc.l Collect,EndCollect
  9154. ;5
  9155.  dc.l DoorNoise,EndDoorNoise
  9156.  dc.l 0,0
  9157.  dc.l Stomp,EndStomp
  9158.  dc.l LowScream,EndLowScream
  9159.  dc.l BaddieGun,EndBaddieGun
  9160. ;10
  9161.  dc.l SwitchNoise,EndSwitch
  9162.  dc.l Reload,EndReload
  9163.  dc.l NoAmmo,EndNoAmmo
  9164.  dc.l Splotch,EndSplotch
  9165.  dc.l SplatPop,EndSplatPop
  9166. ;15
  9167.  dc.l Boom,EndBoom
  9168.  dc.l Hiss,EndHiss
  9169.  dc.l Howl1,EndHowl1
  9170.  dc.l Howl2,EndHowl2
  9171.  dc.l Pant,EndPant
  9172. ;20
  9173.  dc.l Whoosh,EndWhoosh
  9174.  dc.l ROAR,EndROAR
  9175.  dc.l whoosh,Endwhoosh
  9176.  dc.l 0,0
  9177.  dc.l 0,0
  9178.  dc.l 0,0
  9179.  dc.l 0,0
  9180.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  9181.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  9182.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  9183.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  9184.  
  9185.  dc.l 0
  9186.  
  9187. storeval: dc.w 0
  9188.  
  9189.  include "ab3:source_4000/wallchunk.s"
  9190.  include "ab3:source_4000/loadfromdisk.s"
  9191.  include "ab3:source_4000/screensetup.s"
  9192.  include "ab3:source_4000/CONTROLLOOP.s"
  9193.  
  9194.  
  9195.  
  9196.  
  9197. saveinters:  
  9198.  dc.w 0
  9199.  
  9200. z: dc.w 10
  9201.  
  9202. notifplaying:
  9203.  dc.w 0
  9204.  
  9205. audpos1: dc.w 0
  9206. audpos1b: dc.w 0
  9207. audpos2: dc.w 0
  9208. audpos2b: dc.w 0
  9209. audpos3: dc.w 0
  9210. audpos3b: dc.w 0
  9211. audpos4: dc.w 0
  9212. audpos4b: dc.w 0
  9213.  
  9214. vol0left: dc.w 0
  9215. vol0right: dc.w 0
  9216. vol1left: dc.w 0
  9217. vol1right: dc.w 0
  9218. vol2left: dc.w 0
  9219. vol2right: dc.w 0
  9220. vol3left: dc.w 0
  9221. vol3right: dc.w 0
  9222.  
  9223. pos: dc.l 0
  9224.  
  9225. pos0LEFT: dc.l empty
  9226. pos1LEFT: dc.l empty
  9227. pos2LEFT: dc.l empty
  9228. pos3LEFT: dc.l empty
  9229. pos0RIGHT: dc.l empty
  9230. pos1RIGHT: dc.l empty
  9231. pos2RIGHT: dc.l empty
  9232. pos3RIGHT: dc.l empty
  9233.  
  9234. numtodo dc.w 0
  9235.  
  9236. npt: dc.w 0
  9237.  
  9238. pretab:
  9239. val SET 0
  9240.  REPT 128
  9241.  dc.b val
  9242. val SET val+1
  9243.  ENDR
  9244. val SET -128
  9245.  REPT 128
  9246.  dc.b val
  9247. val SET val+1
  9248.  ENDR 
  9249.  
  9250. tab:
  9251.  ds.b 256*65
  9252.  
  9253.  
  9254. test: dc.l 0
  9255.  ds.l 30
  9256.  
  9257.  even
  9258. ConstCols:
  9259. ; incbin "ConstCols"
  9260.  even
  9261. Smoothscalecols:
  9262. ; incbin "smoothbumppalscaled"
  9263.  even
  9264. SmoothTile:
  9265. ; incbin "smoothbumptile"
  9266.  even
  9267. Bumpscalecols:
  9268. ; incbin "Bumppalscaled"
  9269.  even
  9270. Bumptile:
  9271. ; incbin "bumptile"
  9272.  even
  9273. scalecols: ;incbin "bytepixpalscaled"
  9274.  even
  9275. floorscalecols:
  9276.  incbin "floor256pal"
  9277.  ds.w 256*4
  9278.  
  9279.  even
  9280. PaletteAddr: dc.l 0
  9281. ChunkAddr: dc.l 0
  9282. ;walltiles:
  9283. ; dc.l GreenMechanicWALL
  9284. ; dc.l BlueGreyMetalWALL
  9285. ; dc.l TechnoDetailWALL
  9286. ; dc.l BlueStoneWALL
  9287. ; dc.l RedAlertWALL
  9288. ; dc.l RockWALL
  9289. ;
  9290. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  9291. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  9292. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  9293. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  9294. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  9295. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  9296.  
  9297. floortile:
  9298.  dc.l 0
  9299. ; incbin "floortile" 
  9300.  even
  9301. wallrouts:
  9302. ; incbin "2x2WallDraw" 
  9303.  CNOP 0,64
  9304. BackPicture:
  9305.  incbin "backfile"
  9306. EndBackPicture:
  9307.  
  9308. drawpt: dc.l 0
  9309. olddrawpt: dc.l 0
  9310. frompt: dc.l 0 
  9311.  
  9312. SineTable:
  9313.  incbin "bigsine"
  9314.  
  9315. angspd: dc.w 0
  9316. flooryoff: dc.w 0
  9317. xoff: dc.l 0
  9318. yoff: dc.l 0
  9319. yvel: dc.l 0
  9320. zoff: dc.l 0
  9321. tyoff: dc.l 0
  9322. xspdval: dc.l 0
  9323. zspdval: dc.l 0
  9324. Zone: dc.w 0
  9325.  
  9326. PLR1: dc.b $ff
  9327.  even
  9328. PLR1_energy: dc.w 191
  9329. PLR1_GunSelected: dc.w 0
  9330. PLR1_cosval: dc.w 0
  9331. PLR1_sinval: dc.w 0
  9332. PLR1_angpos: dc.w 0
  9333. PLR1_angspd: dc.w 0
  9334. PLR1_xoff: dc.l 0
  9335. PLR1_yoff: dc.l 0
  9336. PLR1_yvel: dc.l 0
  9337. PLR1_zoff: dc.l 0
  9338. PLR1_tyoff: dc.l 0
  9339. PLR1_xspdval: dc.l 0
  9340. PLR1_zspdval: dc.l 0
  9341. PLR1_Zone: dc.w 0
  9342. PLR1_Roompt: dc.l 0
  9343. PLR1_OldRoompt: dc.l 0
  9344. PLR1_PointsToRotatePtr: dc.l 0
  9345. PLR1_ListOfGraphRooms: dc.l 0
  9346. PLR1_oldxoff: dc.l 0
  9347. PLR1_oldzoff: dc.l 0
  9348. PLR1_StoodInTop: dc.b 0
  9349.  even
  9350. PLR1_height: dc.l 0
  9351.  
  9352.  ds.w 4
  9353.  
  9354. OLDX1: dc.l 0
  9355. OLDX2: dc.l 0
  9356. OLDZ1: dc.l 0
  9357. OLDZ2: dc.l 0
  9358.  
  9359. XDIFF1: dc.l 0
  9360. ZDIFF1: dc.l 0
  9361. XDIFF2: dc.l 0
  9362. ZDIFF2: dc.l 0
  9363.  
  9364. PLR1s_cosval: dc.w 0
  9365. PLR1s_sinval: dc.w 0
  9366. PLR1s_angpos: dc.w 0
  9367. PLR1s_angspd: dc.w 0
  9368. PLR1s_xoff: dc.l 0
  9369. PLR1s_yoff: dc.l 0
  9370. PLR1s_yvel: dc.l 0
  9371. PLR1s_zoff: dc.l 0
  9372. PLR1s_tyoff: dc.l 0
  9373. PLR1s_xspdval: dc.l 0
  9374. PLR1s_zspdval: dc.l 0
  9375. PLR1s_Zone: dc.w 0
  9376. PLR1s_Roompt: dc.l 0
  9377. PLR1s_OldRoompt: dc.l 0
  9378. PLR1s_PointsToRotatePtr: dc.l 0
  9379. PLR1s_ListOfGraphRooms: dc.l 0
  9380. PLR1s_oldxoff: dc.l 0
  9381. PLR1s_oldzoff: dc.l 0
  9382. PLR1s_height: dc.l 0
  9383. PLR1s_targheight: dc.l 0
  9384.  
  9385. p1_xoff: dc.l 0
  9386. p1_zoff: dc.l 0
  9387. p1_yoff: dc.l 0
  9388. p1_height: dc.l 0
  9389. p1_angpos: dc.w 0
  9390. p1_bobble: dc.w 0
  9391. p1_clicked: dc.b 0
  9392. p1_spctap: dc.b 0
  9393. p1_ducked: dc.b 0
  9394. p1_gunselected: dc.b 0
  9395. p1_fire: dc.b 0
  9396.  even
  9397. p1_holddown: dc.w 0
  9398.  
  9399.  ds.w 4
  9400.  
  9401. PLR2: dc.b $ff
  9402.  even
  9403. PLR2_GunSelected: dc.w 0
  9404. PLR2_energy: dc.w 191
  9405. PLR2_cosval: dc.w 0
  9406. PLR2_sinval: dc.w 0
  9407. PLR2_angpos: dc.w 0
  9408. PLR2_angspd: dc.w 0
  9409. PLR2_xoff: dc.l 0
  9410. PLR2_yoff: dc.l 0
  9411. PLR2_yvel: dc.l 0
  9412. PLR2_zoff: dc.l 0
  9413. PLR2_tyoff: dc.l 0
  9414. PLR2_xspdval: dc.l 0
  9415. PLR2_zspdval: dc.l 0
  9416. PLR2_Zone: dc.w 0
  9417. PLR2_Roompt: dc.l 0
  9418. PLR2_OldRoompt: dc.l 0
  9419. PLR2_PointsToRotatePtr: dc.l 0
  9420. PLR2_ListOfGraphRooms: dc.l 0
  9421. PLR2_oldxoff: dc.l 0
  9422. PLR2_oldzoff: dc.l 0
  9423. PLR2_StoodInTop: dc.b 0
  9424.  even
  9425. PLR2_height: dc.l 0
  9426.  
  9427.  ds.w 4
  9428.  
  9429. PLR2s_cosval: dc.w 0
  9430. PLR2s_sinval: dc.w 0
  9431. PLR2s_angpos: dc.w 0
  9432. PLR2s_angspd: dc.w 0
  9433. PLR2s_xoff: dc.l 0
  9434. PLR2s_yoff: dc.l 0
  9435. PLR2s_yvel: dc.l 0
  9436. PLR2s_zoff: dc.l 0
  9437. PLR2s_tyoff: dc.l 0
  9438. PLR2s_xspdval: dc.l 0
  9439. PLR2s_zspdval: dc.l 0
  9440. PLR2s_Zone: dc.w 0
  9441. PLR2s_Roompt: dc.l 0
  9442. PLR2s_OldRoompt: dc.l 0
  9443. PLR2s_PointsToRotatePtr: dc.l 0
  9444. PLR2s_ListOfGraphRooms: dc.l 0
  9445. PLR2s_oldxoff: dc.l 0
  9446. PLR2s_oldzoff: dc.l 0
  9447. PLR2s_height: dc.l 0
  9448. PLR2s_targheight: dc.l 0
  9449.  
  9450.  ds.w 4
  9451.  
  9452. p2_xoff: dc.l 0
  9453. p2_zoff: dc.l 0
  9454. p2_yoff: dc.l 0
  9455. p2_height: dc.l 0
  9456. p2_angpos: dc.w 0
  9457. p2_bobble: dc.w 0
  9458. p2_clicked: dc.b 0
  9459. p2_spctap: dc.b 0
  9460. p2_ducked: dc.b 0
  9461. p2_gunselected: dc.b 0
  9462. p2_fire: dc.b 0
  9463.  even
  9464. p2_holddown: dc.w 0
  9465.  
  9466.  
  9467. liftanimtab:
  9468.  
  9469.  
  9470. endliftanimtab:
  9471.  
  9472. glassball:
  9473. ; incbin "glassball.inc"
  9474.  
  9475. endglass
  9476. glassballpt: dc.l glassball
  9477.  
  9478. rndtab: ; incbin "randfile"
  9479. endrnd: 
  9480.  
  9481. brightanimtab:
  9482.  dcb.w 200,20
  9483.  dc.w 5
  9484.  dc.w 10,20
  9485.  dc.w 5
  9486.  dcb.w 30,20
  9487.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  9488.  dcb.w 40,0
  9489.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  9490.  dcb.w 300,0
  9491.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  9492.  dc.w -1
  9493.  
  9494. Roompt: dc.l 0
  9495. OldRoompt: dc.l 0
  9496.  
  9497. *****************************************************************
  9498.  *
  9499.  include "AB3:source_4000/LevelData2"
  9500.  *
  9501. *****************************************************************
  9502.  
  9503.  
  9504. wallpt: dc.l 0
  9505. floorpt: dc.l 0
  9506.  
  9507. Rotated:
  9508.  ds.l 2*800 
  9509. ObjRotated:
  9510.  ds.l 2*500
  9511.  
  9512. OnScreen:
  9513.  ds.l 2*800 
  9514.  
  9515. startwait: dc.w 0
  9516. endwait: dc.w 0
  9517.  
  9518. Faces:; incbin "faces2raw"
  9519.  
  9520. LINKS: ds.b 10000
  9521.  
  9522. *******************************************************************
  9523.  
  9524. consttab:
  9525.  incbin "constantfile"
  9526.  
  9527. *******************************************************************
  9528.  
  9529.  
  9530.  
  9531. *********************************
  9532.  
  9533. ; include "ab3:source_4000/loadmod.a"
  9534. ; include "ab3:source_4000/proplayer.a"
  9535.  
  9536.  
  9537. darkentab: 
  9538. ;val SET 0
  9539. ; REPT 256
  9540. ; dc.b val
  9541. ;val SET val+1
  9542. ; ENDR
  9543.  incbin "darkenfile"
  9544.  
  9545. SHADINGTABLE: incbin "SHADEFILE" 
  9546.  
  9547. brightentab: incbin "brightenfile"
  9548. WorkSpace:
  9549.  ds.l 8192 
  9550. waterfile: incbin "waterfile"
  9551.  
  9552.  SECTION ffff,CODE_C
  9553.  
  9554. nullspr: dc.l 0
  9555.  
  9556.  cnop 0,8
  9557. borders:
  9558.  incbin "newleftbord"
  9559.  incbin "newrightbord"
  9560.  
  9561. health: incbin "healthstrip"
  9562. Ammunition: incbin "ammostrip"
  9563. healthpal: incbin "healthpal"
  9564. PanelKeys: incbin "greenkey"
  9565.  incbin "redkey"
  9566.  incbin "yellowkey"
  9567.  incbin "bluekey"
  9568.  
  9569. null: ds.w 500
  9570. null2: ds.w 500
  9571. null3: ds.w 500
  9572. null4: ds.w 500
  9573.  
  9574.  
  9575. Blurbfield:
  9576.  
  9577.  dc.w bpl1ptl
  9578. bl1l: dc.w 0
  9579.  dc.w bpl1pth
  9580. bl1h: dc.w 0
  9581.  
  9582.  dc.w diwstart,$2c81
  9583.  dc.w diwstop,$1cc1
  9584.  dc.w ddfstart,$38
  9585.  dc.w ddfstop,$b8
  9586.  dc.w bplcon0,$9201
  9587.  dc.w bplcon1,0
  9588.  dc.w $106,$c40
  9589. blcols:
  9590.  dc.w col0,0
  9591.  dc.w col1,$fff
  9592.  
  9593.  dc.w $108,0
  9594.  dc.w $10a,0
  9595.  
  9596.  dc.w $ffff,$fffe
  9597.  dc.w $ffff,$fffe
  9598.  
  9599. nullline:
  9600.  ds.b 80    
  9601.  
  9602.  include "ab3:source_4000/titlecop.s"
  9603.  
  9604. bigfield:    
  9605.                 ; Start of our copper list.
  9606.  
  9607.  dc.w dmacon,$8020
  9608.  dc.w intreq,$8011
  9609.  dc.w $1fc,$f
  9610.  dc.w diwstart
  9611. winstart: dc.w $2c81
  9612.  dc.w diwstop
  9613. winstop: dc.w $2cc1
  9614.  dc.w ddfstart
  9615. fetchstart: dc.w $38
  9616.  dc.w ddfstop
  9617. fetchstop: dc.w $b8
  9618.  
  9619. bordercols:
  9620.  incbin "borderpal"
  9621.  
  9622.  dc.w spr0ptl
  9623. s0l:
  9624.  dc.w 0
  9625.  dc.w spr0pth
  9626. s0h:
  9627.  dc.w 0
  9628.  dc.w spr1ptl
  9629. s1l:
  9630.  dc.w 0
  9631.  dc.w spr1pth
  9632. s1h:
  9633.  dc.w 0
  9634.  dc.w spr2ptl
  9635. s2l:
  9636.  dc.w 0
  9637.  dc.w spr2pth
  9638. s2h:
  9639.  dc.w 0
  9640.  dc.w spr3ptl
  9641. s3l:
  9642.  dc.w 0
  9643.  dc.w spr3pth
  9644. s3h:
  9645.  dc.w 0
  9646.  dc.w spr4ptl
  9647. s4l:
  9648.  dc.w 0
  9649.  dc.w spr4pth
  9650. s4h:
  9651.  dc.w 0
  9652.  dc.w spr5ptl
  9653. s5l:
  9654.  dc.w 0
  9655.  dc.w spr5pth
  9656. s5h:
  9657.  dc.w 0
  9658.  dc.w spr6ptl
  9659. s6l:
  9660.  dc.w 0
  9661.  dc.w spr6pth
  9662. s6h:
  9663.  dc.w 0
  9664.  dc.w spr7ptl
  9665. s7l:
  9666.  dc.w 0
  9667.  dc.w spr7pth
  9668. s7h:
  9669.  dc.w 0
  9670.  
  9671.  
  9672. ; dc.w $106,$c42
  9673. ; incbin "borderpal"
  9674.  
  9675.  dc.w $106,$c42
  9676.  
  9677.  dc.w bplcon0,$0211
  9678.  dc.w bplcon1
  9679. smoff:
  9680.  dc.w $0
  9681.  
  9682.  dc.w $108
  9683. modulo: dc.w 0
  9684.  dc.w $10a,0
  9685.  
  9686.  dc.w $1001,$ff00
  9687.  dc.w intreq,$11
  9688.  
  9689.  
  9690.  dc.w bpl1pth
  9691. pl1h
  9692.  dc.w 0
  9693.  
  9694.  dc.w bpl1ptl
  9695. pl1l
  9696.  dc.w 0
  9697.  
  9698.  dc.w bpl2pth
  9699. pl2h
  9700.  dc.w 0
  9701.  
  9702.  dc.w bpl2ptl
  9703. pl2l
  9704.  dc.w 0
  9705.  
  9706.  dc.w bpl3pth
  9707. pl3h
  9708.  dc.w 0
  9709.  
  9710.  dc.w bpl3ptl
  9711. pl3l
  9712.  dc.w 0
  9713.  
  9714.  dc.w bpl4pth
  9715. pl4h
  9716.  dc.w 0
  9717.  
  9718.  dc.w bpl4ptl
  9719. pl4l
  9720.  dc.w 0
  9721.  
  9722.  dc.w bpl5pth
  9723. pl5h
  9724.  dc.w 0
  9725.  
  9726.  dc.w bpl5ptl
  9727. pl5l
  9728.  dc.w 0
  9729.  
  9730.  dc.w bpl6pth
  9731. pl6h
  9732.  dc.w 0
  9733.  
  9734.  dc.w bpl6ptl
  9735. pl6l
  9736.  dc.w 0
  9737.  
  9738.  dc.w bpl7pth
  9739. pl7h
  9740.  dc.w 0
  9741.  
  9742.  dc.w bpl7ptl
  9743. pl7l
  9744.  dc.w 0
  9745.  
  9746.  dc.w bpl8pth
  9747. pl8h
  9748.  dc.w 0
  9749.  
  9750.  dc.w bpl8ptl
  9751. pl8l
  9752.  dc.w 0
  9753.  
  9754. ; dc.w $80
  9755. ;JUMPBACKH:
  9756. ; dc.w 0
  9757. ; dc.w $82
  9758. ;JUMPBACKL:
  9759. ; dc.w 0
  9760.  
  9761.  dc.w $8a,0
  9762.  
  9763.  dc.w $ffff,$fffe
  9764.  dc.w $ffff,$fffe
  9765.  
  9766. PALETTEBIT:
  9767.  incbin "256palette"
  9768.  dc.w $ffff,$fffe
  9769.  
  9770. yposcop:
  9771. ; dc.w $2a11,$fffe
  9772. ; dc.w $8a,0
  9773.  
  9774. ; ds.l 104*12
  9775.  
  9776. ;colbars:
  9777. ;val SET $2a
  9778. ; dcb.l 104*80,$1fe0000
  9779. ; dc.w $106,$c42
  9780. ; dc.w $80
  9781. ;pch1:
  9782. ; dc.w 0
  9783. ; dc.w $82
  9784. ;pcl1:
  9785. ; dc.w 0 
  9786. ; dc.w $88,0
  9787. ; dc.w $ffff,$fffe       ; End copper list.
  9788.  
  9789. ; ds.l 104*12
  9790.  
  9791.  
  9792. ;colbars2:
  9793. ;val SET $2a
  9794. ; dcb.l 104*80,$1fe0000
  9795. ; dc.w $106,$c42
  9796. ; dc.w $80
  9797. ;pch2:
  9798. ; dc.w 0
  9799. ; dc.w $82
  9800. ;pcl2:
  9801. ; dc.w 0
  9802. ; dc.w $88,0
  9803. ; dc.w $ffff,$fffe       ; End copper list.
  9804.  
  9805. ; ds.l 104*10
  9806.  
  9807. NullCopper:
  9808.  dc.w $ffff,$fffe
  9809.  
  9810. hitcol: dc.l 0
  9811.  
  9812. old: dc.l 0
  9813.  
  9814. prot5: dc.w 0
  9815. PanelCop:
  9816.  
  9817.  dc.w $80
  9818. och:
  9819.  dc.w 0
  9820.  dc.w $82
  9821. ocl:
  9822.  dc.w 0
  9823.  
  9824. statskip:
  9825.  dc.w $1fe,0
  9826.  dc.w $1fe,0
  9827.  
  9828.  dc.w $10c,0
  9829.  dc.w bplcon0,$1201
  9830.  dc.w bpl1ptl
  9831. n1l:
  9832.  dc.w 0
  9833.  dc.w bpl1pth
  9834. n1h:
  9835.  dc.w 0
  9836.  dc.w $108,-24
  9837.  incbin "Panelpal"
  9838.  
  9839.  dc.w bpl2pth
  9840. p2h
  9841.  dc.w 0
  9842.  
  9843.  dc.w bpl2ptl
  9844. p2l
  9845.  dc.w 0
  9846.  
  9847.  dc.w bpl3pth
  9848. p3h
  9849.  dc.w 0
  9850.  
  9851.  dc.w bpl3ptl
  9852. p3l
  9853.  dc.w 0
  9854.  
  9855.  dc.w bpl4pth
  9856. p4h
  9857.  dc.w 0
  9858.  dc.w bpl4ptl
  9859. p4l
  9860.  dc.w 0
  9861.  dc.w bpl5pth
  9862. p5h
  9863.  dc.w 0
  9864.  dc.w bpl5ptl
  9865. p5l
  9866.  dc.w 0
  9867.  dc.w bpl6pth
  9868. p6h
  9869.  dc.w 0
  9870.  dc.w bpl6ptl
  9871. p6l
  9872.  dc.w 0
  9873.  dc.w bpl7pth
  9874. p7h
  9875.  dc.w 0
  9876.  dc.w bpl7ptl
  9877. p7l
  9878.  dc.w 0
  9879.  dc.w bpl8pth
  9880. p8h
  9881.  dc.w 0
  9882.  dc.w bpl8ptl
  9883. p8l
  9884.  dc.w 0
  9885.  
  9886.  
  9887.  dc.w ddfstart,$38
  9888.  dc.w ddfstop,$b8
  9889.  dc.w diwstart,$2c81
  9890.  dc.w diwstop,$2cc1
  9891.  
  9892.  dc.w bplcon0
  9893. Panelcon: dc.w $0211
  9894.  dc.w bpl1pth
  9895. p1h
  9896.  dc.w 0
  9897.  
  9898.  dc.w bpl1ptl
  9899. p1l
  9900.  dc.w 0
  9901.  
  9902.  
  9903.  dc.w $108,40*7
  9904.  dc.w $10a,40*7
  9905.  
  9906.  dc.w $ffff,$fffe
  9907.  
  9908.  dc.w $180,$fff
  9909.  
  9910.  
  9911.  dc.w $f801,$ff00
  9912.  dc.w col1,$50
  9913.  dc.w $f901,$ff00
  9914.  dc.w col1,$90
  9915.  dc.w $fa01,$ff00
  9916.  dc.w col1,$f0
  9917.  dc.w $fb01,$ff00
  9918.  dc.w col1,$f0
  9919.  dc.w $fc01,$ff00
  9920.  dc.w col1,$90
  9921.  dc.w $fd01,$ff00
  9922.  dc.w col1,$50
  9923.  
  9924.  dc.w $fe01,$ff00
  9925.  dc.w col1,$fff
  9926.  
  9927.  dc.w $ffdf,$fffe
  9928.  dc.w $a01,$ff00
  9929.  dc.w bplcon0,$201
  9930.  
  9931.  incbin "faces2cols"
  9932.  dc.w bpl1pth
  9933. f1h
  9934.  dc.w 0
  9935.  
  9936.  dc.w bpl1ptl
  9937. f1l
  9938.  dc.w 0
  9939.  
  9940.  dc.w bpl2pth
  9941. f2h
  9942.  dc.w 0
  9943.  
  9944.  dc.w bpl2ptl
  9945. f2l
  9946.  dc.w 0
  9947.  
  9948.  dc.w bpl3pth
  9949. f3h
  9950.  dc.w 0
  9951.  
  9952.  dc.w bpl3ptl
  9953. f3l
  9954.  dc.w 0
  9955.  
  9956.  dc.w bpl4pth
  9957. f4h
  9958.  dc.w 0
  9959.  dc.w bpl4ptl
  9960. f4l
  9961.  dc.w 0
  9962.  
  9963.  dc.w bpl5pth
  9964. f5h
  9965.  dc.w 0
  9966.  dc.w bpl5ptl
  9967. f5l
  9968.  dc.w 0
  9969.  
  9970.  dc.w $0c01,$ff00
  9971.  dc.w bplcon0,$5201
  9972.   
  9973.  dc.w $ffff,$fffe
  9974.  
  9975.  cnop 0,64
  9976. FacePlace:
  9977. ; ds.l 6*32*5
  9978.  
  9979. TEXTSCRN: dc.l 0
  9980.  
  9981. TEXTCOP:
  9982.  dc.w intreq,$8030
  9983.  
  9984.  dc.w spr0ptl
  9985. txs0l:
  9986.  dc.w 0
  9987.  dc.w spr0pth
  9988. txs0h:
  9989.  dc.w 0
  9990.  dc.w spr1ptl
  9991. txs1l:
  9992.  dc.w 0
  9993.  dc.w spr1pth
  9994. txs1h:
  9995.  dc.w 0
  9996.  dc.w spr2ptl
  9997. txs2l:
  9998.  dc.w 0
  9999.  dc.w spr2pth
  10000. txs2h:
  10001.  dc.w 0
  10002.  dc.w spr3ptl
  10003. txs3l:
  10004.  dc.w 0
  10005.  dc.w spr3pth
  10006. txs3h:
  10007.  dc.w 0
  10008.  dc.w spr4ptl
  10009. txs4l:
  10010.  dc.w 0
  10011.  dc.w spr4pth
  10012. txs4h:
  10013.  dc.w 0
  10014.  dc.w spr5ptl
  10015. txs5l:
  10016.  dc.w 0
  10017.  dc.w spr5pth
  10018. txs5h:
  10019.  dc.w 0
  10020.  dc.w spr6ptl
  10021. txs6l:
  10022.  dc.w 0
  10023.  dc.w spr6pth
  10024. txs6h:
  10025.  dc.w 0
  10026.  dc.w spr7ptl
  10027. txs7l:
  10028.  dc.w 0
  10029.  dc.w spr7pth
  10030. txs7h:
  10031.  dc.w 0
  10032.  
  10033.  
  10034.  dc.w $10c,$0088
  10035.  
  10036.  dc.w $1fc,$f
  10037.  dc.w diwstart,$2c81    ; Top left corner of screen.
  10038.  dc.w diwstop,$2cc1     ; Bottom right corner of screen.
  10039.  dc.w ddfstart,$38      ; Data fetch start.
  10040.  dc.w ddfstop,$c8       ; Data fetch stop.
  10041.  
  10042.  dc.w bplcon0
  10043. TSCP:
  10044.  dc.w $9201
  10045.  
  10046.  dc.w $106,$c40
  10047.  
  10048.  dc.w $2a01,$ff00
  10049.  
  10050.  dc.w col0,0
  10051.  dc.w col1
  10052. TOPLET:
  10053. TXTCOLL:
  10054.  dc.w 0
  10055.   dc.w col2
  10056. BOTLET:
  10057.  dc.w 0
  10058.  dc.w col3
  10059. ALLTEXT:
  10060.  dc.w $fff
  10061.  dc.w $106,$e40
  10062.  dc.w col3
  10063. ALLTEXTLOW:
  10064.  dc.w $0
  10065.  
  10066.  
  10067.  dc.w bpl1pth
  10068. TSPTh:
  10069.  dc.w 0
  10070.  dc.w bpl1ptl
  10071. TSPTl:
  10072.  dc.w 0
  10073.  
  10074.  dc.w bpl2pth
  10075. TSPTh2:
  10076.  dc.w 0
  10077.  dc.w bpl2ptl
  10078. TSPTl2:
  10079.  dc.w 0
  10080.  
  10081.  
  10082.  dc.w $108,0
  10083.  dc.w $10a,0
  10084.  
  10085.  dc.w $ffff,$fffe
  10086.  
  10087. ********************************************
  10088. * Stuff you don't have to worry about yet. *
  10089. ********************************************
  10090.  
  10091. closeeverything:
  10092.  
  10093.  jsr mt_end
  10094.  
  10095.  move.l #nullcop,d0
  10096. ; move.l old,d0
  10097.  
  10098.  
  10099. ;charlie  
  10100.  move.l d0,$dff080     ; Restore old copper list.
  10101.  move.w d0,ocl
  10102.  swap d0
  10103.  move.w d0,och
  10104.  
  10105. ; move.l doslib,a6
  10106. ; move.l #4,d1
  10107. ; jsr -198(a6)
  10108.  
  10109. ; move.l doslib,d0
  10110. ; move.l d0,a1
  10111. ; move.l 4.w,a6
  10112. ; jsr CloseLib(a6)
  10113.  
  10114.  move.l #$dff000,a6
  10115.  move.w #$8020,dmacon(a6)
  10116.  move.w #$f,dmacon(a6)
  10117.  
  10118. ; move.l 4.w,a6
  10119. ; lea VBLANKInt,a1
  10120. ; moveq #INTB_COPER,d0
  10121. ; jsr _LVORemIntServer(a6)
  10122.  
  10123. ; IFEQ CD32VER
  10124. ; move.l OLDKINT,$68.w
  10125. ; ENDC
  10126. ; move.w saveinters,d0
  10127. ; or.w #$c000,d0
  10128. ; move.w d0,intena(a6)
  10129.  clr.w $dff0a8
  10130.  clr.w $dff0b8
  10131.  clr.w $dff0c8
  10132.  clr.w $dff0d8
  10133.  
  10134.  
  10135. ; move.l oldview,a1
  10136. ; move.l a1,d0
  10137. ; move.l gfxbase,a6
  10138. ; jsr -$de(a6)
  10139.  
  10140. ; cmp.b #'s',mors
  10141. ; beq.s leaveold
  10142. ; move.w #$f8e,$dff1dc
  10143. ;leaveold:
  10144.  
  10145.  jsr RELEASELEVELMEM
  10146.  jsr RELEASESCRNMEM
  10147.  
  10148.  move.l #0,d0
  10149.  
  10150.  rts
  10151.  
  10152.  
  10153.  
  10154. intbase: dc.l 0
  10155. gfxbase: dc.l 0
  10156. oldview: dc.l 0
  10157.  
  10158. stuff:
  10159.  
  10160.     PRSDL
  10161.     Lea    gfxname(pc),a1    
  10162.     Moveq.l    #0,d0
  10163.     Move.l    $4.w,a6    
  10164.     Jsr    -$228(a6)
  10165.     add.w d1,RVAL1
  10166.     Move.l     d0,gfxbase
  10167.     Move.l    d0,a6                Use As Base Reg
  10168.     Move.l    34(a6),oldview
  10169.     move.l 38(a6),old
  10170.     rts
  10171.  
  10172. gfxname dc.b "graphics.library",0
  10173.  even
  10174. INTUNAME    dc.b    "intuition.library",0
  10175.  
  10176.  even
  10177.  
  10178.  
  10179.  cnop 0,64
  10180.  
  10181. Panel:
  10182.  dc.l 0
  10183.  
  10184. TimerScr: 
  10185. ;ds.b 40*64
  10186.  
  10187. scrntab:
  10188.  ds.b 16
  10189. val SET 32
  10190.  REPT 96
  10191.  dc.b val,val,val
  10192. val SET val+1
  10193.  ENDR
  10194.  ds.b 16
  10195.  
  10196. smallscrntab:
  10197. val SET 32
  10198.  REPT 96
  10199.  dc.b val,val
  10200. val SET val+1
  10201.  ENDR
  10202.  
  10203.  cnop 0,64
  10204. scrn:
  10205.  ds.l 2560*8
  10206. scrn2:
  10207.  ds.l 2560*8
  10208.  
  10209. SCRNDRAWPT: dc.l scrn
  10210. SCRNSHOWPT: dc.l scrn2
  10211.  
  10212.  dcb.l 8,$33333333
  10213.  dc.l 0
  10214.  dc.l 0
  10215.  
  10216.  dcb.l 8,$0f0f0f0f
  10217.  dc.l 0
  10218.  dc.l 0
  10219.  
  10220.  dcb.l 8,$00ff00ff
  10221.  dc.l 0
  10222.  dc.l 0
  10223.  
  10224.  dcb.l 8,$0000ffff
  10225.  dc.l 0
  10226.  dc.l 0
  10227.  
  10228.  dc.l 0,-1,0,-1,0,-1,0,-1
  10229.  dc.l 0
  10230.  dc.l 0
  10231.  
  10232.  dc.l -1,-1,0,0,-1,-1,0,0
  10233.  dc.l 0
  10234.  dc.l 0
  10235.  
  10236.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  10237.  dc.l 0
  10238.  dc.l 0
  10239.  
  10240. NumTimes: dc.l 0
  10241. TimeCount: dc.l 0
  10242. oldtime: dc.l 0
  10243. counting: dc.b 0
  10244. oktodisplay: dc.b 0
  10245.  
  10246. INITTIMER:
  10247.  move.l #0,TimeCount
  10248.  move.l #0,NumTimes
  10249.  rts
  10250.  
  10251. STARTCOUNT:
  10252.  move.l d0,-(a7)
  10253.  move.l $dff004,d0
  10254.  and.l #$1ffff,d0
  10255.  move.l d0,oldtime
  10256.  st counting
  10257.  move.l (a7)+,d0
  10258.  rts
  10259.  
  10260. STOPCOUNT:
  10261.  move.l d0,-(a7)
  10262.  move.l $dff004,d0
  10263.  and.l #$1ffff,d0
  10264.  
  10265.  sub.l oldtime,d0
  10266.  cmp.l #-256,d0
  10267.  bge.s okcount
  10268.  add.l #313*256,d0
  10269. okcount:
  10270.  add.l d0,TimeCount
  10271.  addq.l #1,NumTimes
  10272.  clr.b counting
  10273.  move.l (a7)+,d0
  10274.  rts
  10275.  
  10276. STOPCOUNTNOADD:
  10277.  move.l d0,-(a7)
  10278.  move.l $dff004,d0
  10279.  and.l #$1ffff,d0
  10280.  
  10281.  sub.l oldtime,d0
  10282.  cmp.l #-256,d0
  10283.  bge.s okcount2
  10284.  add.l #313*256,d0
  10285. okcount2:
  10286.  add.l d0,TimeCount
  10287.  clr.b counting
  10288.  move.l (a7)+,d0
  10289.  rts
  10290.  
  10291. maxbot: dc.w 0
  10292. tstneg: dc.l 0
  10293.  
  10294. STOPTIMER:
  10295.  st oktodisplay
  10296.  rts
  10297.  
  10298. digits: incbin "numbers.inc"
  10299.  
  10300.  
  10301.  Section Sounds,CODE_C
  10302.  
  10303. nullcop:
  10304.  dc.w $106,$c40
  10305.  dc.w $180,0 
  10306.  dc.w $100,$0
  10307.  dc.w $ffff,$fffe
  10308.  
  10309. Scream:
  10310. ; incbin "ab3:sounds/Scream"
  10311. ; ds.w 100
  10312. EndScream:
  10313. LowScream:
  10314. ; incbin "ab3:sounds/LowScream"
  10315. ; ds.w 100
  10316. EndLowScream:
  10317. BaddieGun:
  10318. ; incbin "ab3:sounds/BaddieGun"
  10319. EndBaddieGun:
  10320. bass:
  10321. ; incbin "ab3:sounds/backbass+drum"
  10322. bassend:
  10323. Shoot:
  10324. ; incbin "ab3:sounds/fire!"
  10325. EndShoot:
  10326. Munch:
  10327. ; incbin "ab3:sounds/munch"
  10328. EndMunch:
  10329. PooGun:
  10330. ; incbin "ab3:sounds/shoot.dm"
  10331. EndPooGun:
  10332. Collect:
  10333. ; incbin "ab3:sounds/collect"
  10334. EndCollect:
  10335. DoorNoise:
  10336. ; incbin "ab3:sounds/newdoor"
  10337. EndDoorNoise:
  10338. Stomp:
  10339. ; incbin "ab3:sounds/footstep3"
  10340. EndStomp:
  10341. SwitchNoise:
  10342. ; incbin "ab3:sounds/switch"
  10343. EndSwitch:
  10344. Reload:
  10345. ; incbin "ab3:sounds/switch1.SFX"
  10346. EndReload:
  10347.  
  10348. CHEATFRAME:
  10349.  dc.b 26,20,33,27,17,12
  10350. ENDCHEAT:
  10351.  
  10352. NoAmmo:
  10353. ; incbin "ab3:sounds/noammo"
  10354. EndNoAmmo:
  10355. Splotch:
  10356. ; incbin "ab3:sounds/splotch"
  10357. EndSplotch:
  10358. SplatPop:
  10359. ; incbin "ab3:sounds/splatpop"
  10360. EndSplatPop:
  10361. Boom:
  10362. ; incbin "ab3:sounds/boom"
  10363. EndBoom:
  10364. Hiss:
  10365. ; incbin "ab3:sounds/newhiss"
  10366. EndHiss:
  10367. Howl1:
  10368. ; incbin "ab3:sounds/howl1"
  10369. EndHowl1:
  10370. Howl2:
  10371. ; incbin "ab3:sounds/howl2"
  10372. EndHowl2:
  10373. Pant:
  10374. ; incbin "ab3:sounds/pant"
  10375. EndPant:
  10376. Whoosh:
  10377. ; incbin "ab3:sounds/whoosh"
  10378. EndWhoosh:
  10379. ROAR:
  10380. ; incbin "ab3:sounds/bigscream"
  10381. EndROAR
  10382. whoosh:
  10383. ; incbin "ab3:sounds/flame"
  10384. Endwhoosh:
  10385.  SECTION music,code_c
  10386.  
  10387. UseAllChannels: dc.w 0
  10388.  
  10389. mt_init:move.l    mt_data,a0
  10390.     move.l    a0,a1
  10391.     add.l    #$3b8,a1
  10392.     moveq    #$7f,d0
  10393.     moveq    #0,d1
  10394. mt_loop:move.l    d1,d2
  10395.     subq.w    #1,d0
  10396. mt_lop2:move.b    (a1)+,d1
  10397.     cmp.b    d2,d1
  10398.     bgt.s    mt_loop
  10399.     dbf    d0,mt_lop2
  10400.     addq.b    #1,d2
  10401.  
  10402.     lea    mt_samplestarts(pc),a1
  10403.     asl.l    #8,d2
  10404.     asl.l    #2,d2
  10405.     add.l    #$43c,d2
  10406.     add.l    a0,d2
  10407.     move.l    d2,a2
  10408.     moveq    #$1e,d0
  10409. mt_lop3:clr.l    (a2)
  10410.     move.l    a2,(a1)+
  10411.     moveq    #0,d1
  10412.     move.w    42(a0),d1
  10413.     asl.l    #1,d1
  10414.     add.l    d1,a2
  10415.     add.l    #$1e,a0
  10416.     dbf    d0,mt_lop3
  10417.  
  10418.     or.b    #$2,$bfe001
  10419.     move.b    #$6,mt_speed
  10420.     clr.w    $dff0a8
  10421.     clr.w    $dff0b8
  10422.     clr.w    $dff0c8
  10423.     clr.w    $dff0d8
  10424.     clr.b    mt_songpos
  10425.     clr.b    mt_counter
  10426.     clr.w    mt_pattpos
  10427.     rts
  10428.  
  10429. mt_end:    clr.w    $dff0a8
  10430.     clr.w    $dff0b8
  10431.     clr.w    $dff0c8
  10432.     clr.w    $dff0d8
  10433.     move.w    #$f,$dff096
  10434.     rts
  10435.  
  10436. mt_music:
  10437.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  10438.     move.l    mt_data,a0
  10439.     addq.b    #$1,mt_counter
  10440.     move.b    mt_counter,D0
  10441.     cmp.b    mt_speed,D0
  10442.     blt.s    mt_nonew
  10443.     clr.b    mt_counter
  10444.     bra    mt_getnew
  10445.  
  10446. mt_nonew:
  10447.     lea    mt_voice1(pc),a6
  10448.     lea    $dff0a0,a5
  10449.     bsr    mt_checkcom
  10450.     lea    mt_voice2(pc),a6
  10451.     lea    $dff0b0,a5
  10452.     bsr    mt_checkcom
  10453.     tst.b UseAllChannels
  10454.     beq mt_endr
  10455.      lea    mt_voice3(pc),a6
  10456.     lea    $dff0c0,a5
  10457.     bsr    mt_checkcom
  10458.     lea    mt_voice4(pc),a6
  10459.     lea    $dff0d0,a5
  10460.     bsr    mt_checkcom
  10461.     bra    mt_endr
  10462.  
  10463. mt_arpeggio:
  10464.     moveq    #0,d0
  10465.     move.b    mt_counter,d0
  10466.     divs    #$3,d0
  10467.     swap    d0
  10468.     cmp.w    #$0,d0
  10469.     beq.s    mt_arp2
  10470.     cmp.w    #$2,d0
  10471.     beq.s    mt_arp1
  10472.  
  10473.     moveq    #0,d0
  10474.     move.b    $3(a6),d0
  10475.     lsr.b    #4,d0
  10476.     bra.s    mt_arp3
  10477. mt_arp1:moveq    #0,d0
  10478.     move.b    $3(a6),d0
  10479.     and.b    #$f,d0
  10480.     bra.s    mt_arp3
  10481. mt_arp2:move.w    $10(a6),d2
  10482.     bra.s    mt_arp4
  10483. mt_arp3:asl.w    #1,d0
  10484.     moveq    #0,d1
  10485.     move.w    $10(a6),d1
  10486.     lea    mt_periods(pc),a0
  10487.     moveq    #$24,d7
  10488. mt_arploop:
  10489.     move.w    (a0,d0.w),d2
  10490.     cmp.w    (a0),d1
  10491.     bge.s    mt_arp4
  10492.     addq.l    #2,a0
  10493.     dbf    d7,mt_arploop
  10494.     rts
  10495. mt_arp4:move.w    d2,$6(a5)
  10496.     rts
  10497.  
  10498. mt_getnew:
  10499.     move.l    mt_data,a0
  10500.     move.l    a0,a3
  10501.     move.l    a0,a2
  10502.     add.l    #$c,a3
  10503.     add.l    #$3b8,a2
  10504.     add.l    #$43c,a0
  10505.  
  10506.     moveq    #0,d0
  10507.     move.l    d0,d1
  10508.     move.b    mt_songpos,d0
  10509.     move.b    (a2,d0.w),d1
  10510.     asl.l    #8,d1
  10511.     asl.l    #2,d1
  10512.     add.w    mt_pattpos,d1
  10513.     clr.w    mt_dmacon
  10514.  
  10515.     lea    $dff0a0,a5
  10516.     lea    mt_voice1(pc),a6
  10517.     bsr    mt_playvoice
  10518.     lea    $dff0b0,a5
  10519.     lea    mt_voice2(pc),a6
  10520.     bsr    mt_playvoice
  10521.     tst.b UseAllChannels
  10522.     beq mt_setdma
  10523.     lea    $dff0c0,a5
  10524.     lea    mt_voice3(pc),a6
  10525.     bsr    mt_playvoice
  10526.     lea    $dff0d0,a5
  10527.     lea    mt_voice4(pc),a6
  10528.     bsr    mt_playvoice
  10529.     bra    mt_setdma
  10530.  
  10531. PROTCALC:
  10532. ;    include "ab3:source_4000/protcalc.s"
  10533.     incbin "ab3:includes/protcalc.bin"
  10534. ENDPROTCALC:
  10535.  
  10536. mt_playvoice:
  10537.     move.l    (a0,d1.l),(a6)
  10538.     addq.l    #4,d1
  10539.     moveq    #0,d2
  10540.     move.b    $2(a6),d2
  10541.     and.b    #$f0,d2
  10542.     lsr.b    #4,d2
  10543.     move.b    (a6),d0
  10544.     and.b    #$f0,d0
  10545.     or.b    d0,d2
  10546.     tst.b    d2
  10547.     beq.s    mt_setregs
  10548.     moveq    #0,d3
  10549.     lea    mt_samplestarts(pc),a1
  10550.     move.l    d2,d4
  10551.     subq.l    #$1,d2
  10552.     asl.l    #2,d2
  10553.     mulu    #$1e,d4
  10554.     move.l    (a1,d2.l),$4(a6)
  10555.     move.w    (a3,d4.l),$8(a6)
  10556.     move.w    $2(a3,d4.l),$12(a6)
  10557.     move.w    $4(a3,d4.l),d3
  10558.     tst.w    d3
  10559.     beq.s    mt_noloop
  10560.     move.l    $4(a6),d2
  10561.     asl.w    #1,d3
  10562.     add.l    d3,d2
  10563.     move.l    d2,$a(a6)
  10564.     move.w    $4(a3,d4.l),d0
  10565.     add.w    $6(a3,d4.l),d0
  10566.     move.w    d0,8(a6)
  10567.     move.w    $6(a3,d4.l),$e(a6)
  10568.     move.w    $12(a6),d0
  10569.     asr.w #2,d0
  10570.     move.w d0,$8(a5)
  10571.     bra.s    mt_setregs
  10572. mt_noloop:
  10573.     move.l    $4(a6),d2
  10574.     add.l    d3,d2
  10575.     move.l    d2,$a(a6)
  10576.     move.w    $6(a3,d4.l),$e(a6)
  10577.     move.w    $12(a6),d0
  10578.     asr.w #2,d0
  10579.     move.w d0,$8(a5)
  10580. mt_setregs:
  10581.     move.w    (a6),d0
  10582.     and.w    #$fff,d0
  10583.     beq    mt_checkcom2
  10584.     move.b    $2(a6),d0
  10585.     and.b    #$F,d0
  10586.     cmp.b    #$3,d0
  10587.     bne.s    mt_setperiod
  10588.     bsr    mt_setmyport
  10589.     bra    mt_checkcom2
  10590. mt_setperiod:
  10591.     move.w    (a6),$10(a6)
  10592.     and.w    #$fff,$10(a6)
  10593.     move.w    $14(a6),d0
  10594.     move.w    d0,$dff096
  10595.     clr.b    $1b(a6)
  10596.  
  10597.     move.l    $4(a6),(a5)
  10598.     move.w    $8(a6),$4(a5)
  10599.     move.w    $10(a6),d0
  10600.     and.w    #$fff,d0
  10601.     move.w    d0,$6(a5)
  10602.     move.w    $14(a6),d0
  10603.     or.w    d0,mt_dmacon
  10604.     bra    mt_checkcom2
  10605.  
  10606. mt_setdma:
  10607.      move.w #250,d0
  10608. mt_wait:
  10609.      add.w #1,testchip
  10610.      dbra d0,mt_wait
  10611.     move.w    mt_dmacon,d0
  10612.     or.w    #$8000,d0
  10613.     and.w #%1111111111110011,d0
  10614.     move.w    d0,$dff096
  10615.     move.w #250,d0
  10616. mt_wait2:
  10617.     add.w #1,testchip
  10618.     dbra    d0,mt_wait2
  10619.     lea    $dff000,a5
  10620.     tst.b UseAllChannels
  10621.     beq.s noall
  10622.     lea    mt_voice4(pc),a6
  10623.     move.l    $a(a6),$d0(a5)
  10624.     move.w    $e(a6),$d4(a5)
  10625.     lea    mt_voice3(pc),a6
  10626.     move.l    $a(a6),$c0(a5)
  10627.     move.w    $e(a6),$c4(a5)
  10628. noall:
  10629.     lea    mt_voice2(pc),a6
  10630.     move.l    $a(a6),$b0(a5)
  10631.     move.w    $e(a6),$b4(a5)
  10632.     lea    mt_voice1(pc),a6
  10633.     move.l    $a(a6),$a0(a5)
  10634.     move.w    $e(a6),$a4(a5)
  10635.  
  10636.     add.w    #$10,mt_pattpos
  10637.     cmp.w    #$400,mt_pattpos
  10638.     bne.s    mt_endr
  10639. mt_nex:    clr.w    mt_pattpos
  10640.     clr.b    mt_break
  10641.     addq.b    #1,mt_songpos
  10642.     and.b    #$7f,mt_songpos
  10643.     move.b    mt_songpos,d1
  10644. ;    cmp.b    mt_data+$3b6,d1
  10645. ;    bne.s    mt_endr
  10646. ;    move.b    mt_data+$3b7,mt_songpos
  10647. mt_endr:tst.b    mt_break
  10648.     bne.s    mt_nex
  10649.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  10650.     rts
  10651.  
  10652. mt_setmyport:
  10653.     move.w    (a6),d2
  10654.     and.w    #$fff,d2
  10655.     move.w    d2,$18(a6)
  10656.     move.w    $10(a6),d0
  10657.     clr.b    $16(a6)
  10658.     cmp.w    d0,d2
  10659.     beq.s    mt_clrport
  10660.     bge.s    mt_rt
  10661.     move.b    #$1,$16(a6)
  10662.     rts
  10663. mt_clrport:
  10664.     clr.w    $18(a6)
  10665. mt_rt:    rts
  10666.  
  10667. CODESTORE: dc.l 0
  10668.  
  10669. mt_myport:
  10670.     move.b    $3(a6),d0
  10671.     beq.s    mt_myslide
  10672.     move.b    d0,$17(a6)
  10673.     clr.b    $3(a6)
  10674. mt_myslide:
  10675.     tst.w    $18(a6)
  10676.     beq.s    mt_rt
  10677.     moveq    #0,d0
  10678.     move.b    $17(a6),d0
  10679.     tst.b    $16(a6)
  10680.     bne.s    mt_mysub
  10681.     add.w    d0,$10(a6)
  10682.     move.w    $18(a6),d0
  10683.     cmp.w    $10(a6),d0
  10684.     bgt.s    mt_myok
  10685.     move.w    $18(a6),$10(a6)
  10686.     clr.w    $18(a6)
  10687. mt_myok:move.w    $10(a6),$6(a5)
  10688.     rts
  10689. mt_mysub:
  10690.     sub.w    d0,$10(a6)
  10691.     move.w    $18(a6),d0
  10692.     cmp.w    $10(a6),d0
  10693.     blt.s    mt_myok
  10694.     move.w    $18(a6),$10(a6)
  10695.     clr.w    $18(a6)
  10696.     move.w    $10(a6),$6(a5)
  10697.     rts
  10698.  
  10699. mt_vib:    move.b    $3(a6),d0
  10700.     beq.s    mt_vi
  10701.     move.b    d0,$1a(a6)
  10702.  
  10703. mt_vi:    move.b    $1b(a6),d0
  10704.     lea    mt_sin(pc),a4
  10705.     lsr.w    #$2,d0
  10706.     and.w    #$1f,d0
  10707.     moveq    #0,d2
  10708.     move.b    (a4,d0.w),d2
  10709.     move.b    $1a(a6),d0
  10710.     and.w    #$f,d0
  10711.     mulu    d0,d2
  10712.     lsr.w    #$6,d2
  10713.     move.w    $10(a6),d0
  10714.     tst.b    $1b(a6)
  10715.     bmi.s    mt_vibmin
  10716.     add.w    d2,d0
  10717.     bra.s    mt_vib2
  10718. mt_vibmin:
  10719.     sub.w    d2,d0
  10720. mt_vib2:move.w    d0,$6(a5)
  10721.     move.b    $1a(a6),d0
  10722.     lsr.w    #$2,d0
  10723.     and.w    #$3c,d0
  10724.     add.b    d0,$1b(a6)
  10725.     rts
  10726.  
  10727. mt_nop:    move.w    $10(a6),$6(a5)
  10728.     rts
  10729.  
  10730.  
  10731. mt_checkcom:
  10732.     move.w    $2(a6),d0
  10733.     and.w    #$fff,d0
  10734.     beq.s    mt_nop
  10735.     move.b    $2(a6),d0
  10736.     and.b    #$f,d0
  10737.     tst.b    d0
  10738.     beq    mt_arpeggio
  10739.     cmp.b    #$1,d0
  10740.     beq.s    mt_portup
  10741.     cmp.b    #$2,d0
  10742.     beq    mt_portdown
  10743.     cmp.b    #$3,d0
  10744.     beq    mt_myport
  10745.     cmp.b    #$4,d0
  10746.     beq    mt_vib
  10747.     move.w    $10(a6),$6(a5)
  10748.     cmp.b    #$a,d0
  10749.     beq.s    mt_volslide
  10750.     rts
  10751.  
  10752. mt_volslide:
  10753.     moveq    #0,d0
  10754.     move.b    $3(a6),d0
  10755.     lsr.b    #4,d0
  10756.     tst.b    d0
  10757.     beq.s    mt_voldown
  10758.     add.w    d0,$12(a6)
  10759.     cmp.w    #$40,$12(a6)
  10760.     bmi.s    mt_vol2
  10761.     move.w    #$40,$12(a6)
  10762. mt_vol2:move.w    $12(a6),d0
  10763.     asr.w #2,d0
  10764.     move.w d0,$8(a5)
  10765.     rts
  10766.  
  10767. mt_voldown:
  10768.     moveq    #0,d0
  10769.     move.b    $3(a6),d0
  10770.     and.b    #$f,d0
  10771.     sub.w    d0,$12(a6)
  10772.     bpl.s    mt_vol3
  10773.     clr.w    $12(a6)
  10774. mt_vol3:move.w    $12(a6),d0
  10775.     asr.w #2,d0
  10776.     move.w d0,$8(a5)
  10777.     rts
  10778.  
  10779. mt_portup:
  10780.     moveq    #0,d0
  10781.     move.b    $3(a6),d0
  10782.     sub.w    d0,$10(a6)
  10783.     move.w    $10(a6),d0
  10784.     and.w    #$fff,d0
  10785.     cmp.w    #$71,d0
  10786.     bpl.s    mt_por2
  10787.     and.w    #$f000,$10(a6)
  10788.     or.w    #$71,$10(a6)
  10789. mt_por2:move.w    $10(a6),d0
  10790.     and.w    #$fff,d0
  10791.     move.w    d0,$6(a5)
  10792.     rts
  10793.  
  10794. mt_portdown:
  10795.     clr.w    d0
  10796.     move.b    $3(a6),d0
  10797.     add.w    d0,$10(a6)
  10798.     move.w    $10(a6),d0
  10799.     and.w    #$fff,d0
  10800.     cmp.w    #$358,d0
  10801.     bmi.s    mt_por3
  10802.     and.w    #$f000,$10(a6)
  10803.     or.w    #$358,$10(a6)
  10804. mt_por3:move.w    $10(a6),d0
  10805.     and.w    #$fff,d0
  10806.     move.w    d0,$6(a5)
  10807.     rts
  10808.  
  10809. mt_checkcom2:
  10810.     move.b    $2(a6),d0
  10811.     and.b    #$f,d0
  10812.     cmp.b    #$e,d0
  10813.     beq.s    mt_setfilt
  10814.     cmp.b    #$d,d0
  10815.     beq.s    mt_pattbreak
  10816.     cmp.b    #$b,d0
  10817.     beq.s    mt_posjmp
  10818.     cmp.b    #$c,d0
  10819.     beq.s    mt_setvol
  10820.     cmp.b    #$f,d0
  10821.     beq.s    mt_setspeed
  10822.     rts
  10823.  
  10824. mt_setfilt:
  10825.     move.b    $3(a6),d0
  10826.     and.b    #$1,d0
  10827.     asl.b    #$1,d0
  10828.     and.b    #$fd,$bfe001
  10829.     or.b    d0,$bfe001
  10830.     rts
  10831. mt_pattbreak:
  10832.     not.b    mt_break
  10833.     rts
  10834. mt_posjmp:
  10835.     st reachedend
  10836.     move.b    $3(a6),d0
  10837.     subq.b    #$1,d0
  10838.     move.b    d0,mt_songpos
  10839.     not.b    mt_break
  10840.     rts
  10841. mt_setvol:
  10842.     cmp.b    #$40,$3(a6)
  10843.     ble.s    mt_vol4
  10844.     move.b    #$40,$3(a6)
  10845. mt_vol4:move.b    $3(a6),d0
  10846.     asr.w #2,d0
  10847.     move.w d0,$8(a5)
  10848.     rts
  10849. mt_setspeed:
  10850.     cmp.b    #$1f,$3(a6)
  10851.     ble.s    mt_sets
  10852.     move.b    #$1f,$3(a6)
  10853. mt_sets:move.b    $3(a6),d0
  10854.     beq.s    mt_rts2
  10855.     move.b    d0,mt_speed
  10856.     clr.b    mt_counter
  10857. mt_rts2:rts
  10858.  
  10859. mt_sin:
  10860.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  10861.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  10862.  
  10863. mt_periods:
  10864.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  10865.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  10866.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  10867.  DC.w $007f,$0078,$0071,$0000,$0000
  10868.  
  10869. reachedend: dc.b 0
  10870. mt_speed:    DC.b    6
  10871. mt_songpos:    DC.b    0
  10872. mt_pattpos:    DC.w    0
  10873. mt_counter:    DC.b    0
  10874.  
  10875. mt_break:    DC.b    0
  10876. mt_dmacon:    DC.w    0
  10877. mt_samplestarts:DS.L    $1f
  10878. mt_voice1:    DS.w    10
  10879.         DC.w    1
  10880.         DS.w    3
  10881. mt_voice2:    DS.w    10
  10882.         DC.w    2
  10883.         DS.w    3
  10884. mt_voice3:    DS.w    10
  10885.         DC.w    4
  10886.         DS.w    3
  10887. mt_voice4:    DS.w    10
  10888.         DC.w    8
  10889.         DS.w    3
  10890.  
  10891. CHEATPTR: dc.l 0
  10892. CHEATNUM: dc.l 0
  10893.  
  10894. testchip: dc.w 0
  10895.  
  10896. ;/* End of File */
  10897. mt_data: dc.l 0
  10898. tstchip: dc.l 0
  10899.  include "SERIAL_NIGHTMARE"
  10900.  
  10901. ingame:
  10902. ; incbin "ab3:includes/ingame"
  10903. gameover: incbin "ab3:includes/gameover"
  10904. welldone: incbin "ab3:includes/welldone"
  10905.  
  10906.  
  10907.